Spring_AOP_Proxy AOP静态代理的实现
2014-09-10 23:38
375 查看
Spring中AOP的静态代理实现:
在我们的项目中会有日志记录和权限管理及其他与业务逻辑无关的内容,这些我们需要抽取到单独得模块去处理这些内容!
下面是AOP的静态代理实现,AOP图解;
![](https://img-blog.csdn.net/20140910234159955?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvb21zdmlw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
用日志的例子来说明,下面我们先创建一个专门记录日志的类:package com.spring.log;
import java.util.Date;
/**
* 日志
* @author sunlight
*
*/
public class Logger {
public static void info(String info){
//此处编辑日志输出内容
System.out.println(new Date()+"===========>>"+info);
}
}
我们在执行数据库操作的时候添加日志记录,编写一个User的静态代理的Dao类并实现IUserDao接口,代码如下:
在Service处注入时,我们使用静态代理的UserProxyDao注入,代码如下:
其他代码详见:Spring中IOC的Annotation实现
执行结果:
在我们的项目中会有日志记录和权限管理及其他与业务逻辑无关的内容,这些我们需要抽取到单独得模块去处理这些内容!
下面是AOP的静态代理实现,AOP图解;
用日志的例子来说明,下面我们先创建一个专门记录日志的类:package com.spring.log;
import java.util.Date;
/**
* 日志
* @author sunlight
*
*/
public class Logger {
public static void info(String info){
//此处编辑日志输出内容
System.out.println(new Date()+"===========>>"+info);
}
}
我们在执行数据库操作的时候添加日志记录,编写一个User的静态代理的Dao类并实现IUserDao接口,代码如下:
package com.spring.dao; import javax.annotation.Resource; import org.springframework.stereotype.Component; import com.spring.log.Logger; import com.spring.model.User; /** * 在没有源代码的情况或者权限控制及部分开放 代理类 * * @author sunlight * */ @Component("userProxyDao") public class UserProxyDao implements IUserDao { private IUserDao userDao; public IUserDao getUserDao() { return userDao; } @Resource public void setUserDao(IUserDao userDao) { this.userDao = userDao; } @Override public void add(User user) { // 不破坏原来的代码 Logger.info("添加了用户"); userDao.add(user); } @Override public void delete(int id) { Logger.info("删除了用户"); userDao.delete(id); } @Override public User load(int id) { return null; } }
在Service处注入时,我们使用静态代理的UserProxyDao注入,代码如下:
package com.spring.service; import javax.annotation.Resource; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import com.spring.dao.IUserDao; import com.spring.model.User; //@Component(value="userService") @Service("userService") //业务层一般用@Service注入 public class UserService implements IUserService { private IUserDao userDao; public IUserDao getUserDao() { return userDao; } //默认通过名称注入,在JSR330中提供了@Inject来注入 @Resource(name="userProxyDao") //此处用代理类注入 public void setUserDao(IUserDao userDao) { this.userDao = userDao; } @Override public void add(User user) { userDao.add(user); } @Override public void delete(int id) { userDao.delete(id); } @Override public User load(int id) { return userDao.load(id); } }
其他代码详见:Spring中IOC的Annotation实现
执行结果:
相关文章推荐
- Spring_AOP_Proxy AOP静态代理的实现 .
- 第37天(就业班) 静态代理与动态代理、oglib代理、手动实现aop编程、注解实现AOP编程、aop相关的几个注解、xml实现aop、切入点表达式、spring对aop模式
- Spring_AOP_Proxy AOP动态代理的实现
- 静态代理、JDK动态代理、CGLIB动态代理、Spring实现AOP、IOC+AOP
- spring(AOP)静态代理、JDK动态代理、cglib实现代理
- Spring AOP的实现原理—— 静态代理和动态代理
- Spring_AOP_Proxy AOP动态代理的实现 .
- Spring 2.5 采用动态代理或cglib来实现aop
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- Spring AOP的底层实现技术---JDK动态代理
- 反射实现 AOP 动态代理模式实例说明(Spring AOP 的实现 原理)
- spring实现AOP的两种方式以及实现动态代理方式
- spring AOP实现(Annotation方式/静态文件配置方式)
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- Spring的无接口代理实现AOP
- 反射实现 AOP 动态代理模式(Spring AOP实现原理)
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- Spring的AOP(四):自动代理及Aspect J的方式实现Aop编程
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- 反射实现 AOP 动态代理模式(Spring AOP 的实现原理)