创建一个UserServiceTest.java
@Test
public void textProxy(){
UserDAO userDAO = new UserDAOImpl();
LogInterceptor li = new LogInterceptor();
li.setTarget(userDAO);
//第一个表示使用的代理对象,第二个表示使用的代理接口,第三个表示使用哪个代理 ,返回值为它的返回对象
UserDAO userDAOProxy = (UserDAO)Proxy.newProxyInstance(userDAO.getClass().getClassLoader(), new Class[]{UserDAO.class}, li);
userDAOProxy.save(new User());
userDAOProxy.delete();
}
使用LonInterceptor.java代理
package com.bxt.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class LogInterceptor implements InvocationHandler{
private Object target;
public Object getTarget() {
return target;
}
public void setTarget(Object target) {
this.target = target;
}
public void beforeMethod(Method m){
System.out.println(m.getName()+"start");
}
@Override
public Object invoke(Object proxy, Method m, Object[] args)
throws Throwable {
beforeMethod(m);
m.invoke(target, args);
return null;
}
}
接口UserDAO.java
package com.bxt.dao;
import com.bjsxt.model.User;
public interface UserDAO {
public void save(User user);
public void delete();
}
创建实现类 UserDAOImpl
package com.bxt.dao.impl;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.stereotype.Component;
import com.bjsxt.dao.UserDAO;
import com.bjsxt.model.User;
@Component
public class UserDAOImpl implements UserDAO {
@PostConstruct
public void init(){
System.out.println("init");
}
public void save(User user) {
System.out.println("user saved!");
}
@PreDestroy
public void destory(){
System.out.println("destory");
}
@Override
public void delete() {
System.out.println("user delete!");
}
}
@PreDestroy 此注解表示第一个使用