当前位置 : 主页 > 编程语言 > java >

手动实现aop编程

来源:互联网 收集:自由互联 发布时间:2021-06-28
接口 package com.liu.aop;public interface IUserDao {public void insert();} 实现 package com.liu.aop;import org.springframework.stereotype.Component;@Componentpublic class UserDao implements IUserDao{@Overridepublic void insert() {System
接口
package com.liu.aop;

public interface IUserDao {

	public void insert();
}
实现
package com.liu.aop;

import org.springframework.stereotype.Component;

@Component
public class UserDao implements IUserDao{

	@Override
	public void insert() {
		System.out.println("============保存============");
	}

}
关注点代码
package com.liu.aop;

import org.springframework.stereotype.Component;

@Component
public class Aop {
	
	public void beginBus(){
		System.out.println("=========开启事务==========");
	}
	
	public void endBus(){
		System.out.println("=========结束事务===========");
	}
}
代理工厂
package com.liu.aop;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.InvocationHandler;
import net.sf.cglib.proxy.Proxy;

public class ProxyFactory {
	
	private static Object target;
	
	private static Aop aop;
	
	public static Object getInstance(Object target_,Aop aop_){
		
		target = target_;
		aop = aop_;
		
		return Proxy.newProxyInstance(target.getClass().getClassLoader(),
				target.getClass().getInterfaces(), 
				new InvocationHandler() {
					
					@Override
					public Object invoke(Object proxy, Method method, Object[] args)
							throws Throwable {
						
						aop.beginBus();
						Object returnValue = method.invoke(target, args);
						aop.endBus();
						return returnValue;
					}
				});
	}
}
spring配置文件
 

 
    
    
  
    
    
   
    
    
  

 
log4j配置
log4j.rootLogger =debug,console, file
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %p %c.%M()-%m%n

#-----------------------------------------------------------
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=D:/log/haha.log
log4j.appender.file.MaxFileSize=1024KB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %p %c.%M()-%m%n
测试类
package com.liu.aop;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;

@Component
public class App {

	Logger logger = Logger.getLogger(App.class);
	@Resource
	IUserDao userDao;
	
	@Resource
	Aop aop;
	
	@Test
	public void save(){
		
		ApplicationContext ac 
			= new ClassPathXmlApplicationContext("com/liu/aop/applicationContext.xml");
		IUserDao userDao = (IUserDao)ac.getBean("proxyFactory");
		userDao.insert();
	}
}
网友评论