pom.xml
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency>
bean
User类
public class User {
private String name;
private String password;
}
Utils
LogUtil
public class LogUtil {
private static Logger logger;
public static Logger getLog(Class Classes) {
logger = LoggerFactory.getLogger(Classes);
return logger;
}
}
resources
log4j.properties
log4j.rootLogger=info, stdout,file
# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Redirect log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/log.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
dao
IBoss
public interface IBoss {
void eat();
}
Secretary
public class Secretary {
public void drinking(){
System.out.println("red wine");
}
public void smoking(){
System.out.println("HuaZi");
}
}
IUserDao2
public interface IUserDao2 {
void update(User user);
void add(User user);
void del(int i);
}
impl
BossImpl
public class BossImpl implements IBoss {
public void eat(){
System.out.println("Health package");
}
}
UserDao2Impl
public class UserDao2Impl implements IUserDao2{
@Override
public void update(User user) {
System.out.println("update");
}
@Override
public void add(User user) {
System.out.println("add");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void del(int i) {
System.out.println("del");
}
}
demo
BAS
public class BAS {
public static void main(String[] args) {
BossImpl boss = new BossImpl();
Secretary secretary = new Secretary();
ClassLoader classLoader = Boss.class.getClassLoader();
Class[] interfaces=new Class[]{IBoss.class};
InvocationHandler handler= new InvocationHandler() {
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
secretary.drinking();
Object values=method.invoke(boss,args);
secretary.smoking();
return values;
}
};
IBoss iBoss= (IBoss) Proxy.newProxyInstance(classLoader,interfaces,handler);
iBoss.eat();
}
}
LohSystem
public class LogSystem {
public static void main(String[] args) {
User user = new User("czp","123456");
UserDao2Impl dao2 = new UserDao2Impl();
Logger logger = LogUtil.getLog(UserDao2Impl.class);
ClassLoader classLoader =UserDao2Impl.class.getClassLoader();
Class[] interfaces = UserDao2Impl.class.getInterfaces();
InvocationHandler handler = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] objects) throws Throwable {
long start = System.currentTimeMillis();
Object values=method.invoke(dao2,objects);
long end = System.currentTimeMillis();
long time = end-start;
logger.info("方法名:\t"+method.getName()+"\n"+"参数:\t"+ Arrays.toString(objects)+"\n"+"返回值:\t"+values+"\n"+"时间:\t"+time);
return values;
}
};
IUserDao2 userDao2= (IUserDao2) Proxy.newProxyInstance(classLoader,interfaces,handler);
userDao2.update(user);
userDao2.add(user);
userDao2.del(1);
}
}