`
默翁1
  • 浏览: 25231 次
社区版块
存档分类
最新评论

Spring AOP

 
阅读更多

Spring AOP是在基于jdk代理形式和cglib形式的融合

 

public interface IUserDao {
	public void save();
	public void update();
	public void delete();
}

 

public class Advice implements MethodBeforeAdvice{

	@Override
	public void before(Method method, Object[] args, Object object)
			throws Throwable {
		System.out.println(object.getClass().getName()+"的业务逻辑是:"+method.getName());
	
	}
	
	
}

 

 

public class UserDaoIm implements IUserDao{

	@Override
	public void save() {
		System.out.println("保存用户信息");
	}

	@Override
	public void update() {
		System.out.println("更新用户信息");
	}

	@Override
	public void delete() {
		System.out.println("删除用户信息");
	}
	
}

 

		public static void main(String[] args) {
		//目标类
		IUserDao userDao=new UserDaoIm();
		//增强处理类
		Advice advice=new Advice();
		ProxyFactory proxyFactory=new ProxyFactory();
		proxyFactory.addAdvice(advice);
		proxyFactory.setTarget(userDao);
		//获取代理
		IUserDao userDao2=(IUserDao)proxyFactory.getProxy();
		userDao2.save();
	}

 也可以通过配置的形式:

 

	<!-- 目标对象 -->
	<bean id="userDao" class="before.UserDaoIm"></bean>
	<!-- 增强类 -->
	<bean id="advice" class="before.Advice"></bean>
	<bean id="after" class="before.after"></bean>
	<!-- 代理 bena-->
	<bean id="factory" class="org.springframework.aop.framework.ProxyFactoryBean"
	p:proxyInterfaces="before.IUserDao"
	p:target-ref="userDao"
	p:interceptorNames="advice,after"/>

 

public static void main(String[] args) {
		ApplicationContext context=new ClassPathXmlApplicationContext("before/beam.xml");
		IUserDao userDaoIm=(IUserDao)context.getBean("factory");
		userDaoIm.save();
	}	

 Aspectj注解的方式:

 

 

@Repository
public class UserDaoIm implements IUserDao{

	public void save() {
		System.out.println("保存用户信息");
	}

	public void update() {
		System.out.println("更新用户信息");
	}

	public void delete() {
		System.out.println("删除用户信息");
	}
	
}

 

@Aspect
public class Advice {
	@Before("execution(* save(..))")
	public void before(){
		System.out.println("开始事务提交");
	}
}

 

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
	<context:component-scan base-package="annotation.**"></context:component-scan>
	<bean id="advice" class="annotation.Advice"></bean>
<!-- 	<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"></bean> -->

 

public static void main(String[] args) {
		ApplicationContext context=new ClassPathXmlApplicationContext("annotation/beam.xml");
		
		//获取代理lei
		IUserDao userDao=(IUserDao)context.getBean("userDaoIm");
		userDao.save();
	}

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics