spring IoC和AOP的原理
2015-07-12 23:19
573 查看
下面为spring的主要原理:
IoC(Inversion of Control):IoC就是应用本身不依赖对象的创建和维护而是交给外部容器(这里为spring),这要就把应用和对象之间解耦,控制权交给了外部容器。即Don't call me ,I'll call you!所以IoC也称DI(依赖注入)对象的创建和维护依赖于外部容器.
class UserService{
private UserDao userDao = new UserDaoImpl(); //让业务层与数据访问层耦合在一起,不利用以后模块的替换.
private UserDao userDao_IoC = null;
public void SetUserDao(UserDao userDao){
this.userDao_IoC = userDao
}
public void save(User user){
userDao.save(user);
}
}
AOP(Aspect Oriented Programming):面向切面编程。就是把一些贯穿在各个模块之间相同的功能抽象出来,然后封装成一个面。
AOP一般都是通过代理来实现,利用代理就有目标对象是什么,拦截哪些点(方法),拦截后要做什么。
JoinPoint(连接点):被拦截到的点. Advice(通知):拦截JoinPoint之前与之后要做的事。
PointCut(切入点):对joinPoint进行拦截的定义。Target(目标对象):代理的目标对象。
对于异常处理,日志功能,权限的检查,事务等都是贯穿到各个模块之中,因此进行AOP.
代理技术有面向接口和生成子类.
public Object getProxy(final Object targetObj) {
Obejct obj = Proxy.newProxyInstance(
targetObj.getClass().getClassLoader(), //被代理类的类加载器
targetObj.getClass().getInterfaces(), //被代理类接口的字节码
new InvocationHandler() { //类似于一个回调函数 代理功能就在里面实现
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{
try{
beforeAdvice(); //前置通知
method.invoke(targetObj, args); //拦截的点
afterAdvice(); //后置通知
}catch (Exception e) {
exceptionAdvice(); //异常通知
}finally{
finalAdvice(); //必须执行通知
}
return obj;
}
});
}
还一个用子类实现的同理 要采用CGlib库来实现 JDK6之前未提供,估计JDK以后会提供。
这就是spring的2大原理,自如怎么配置,那就要花点时间去学,原理思想掌握了哪些配置方法随便学下就明白了。
IoC(Inversion of Control):IoC就是应用本身不依赖对象的创建和维护而是交给外部容器(这里为spring),这要就把应用和对象之间解耦,控制权交给了外部容器。即Don't call me ,I'll call you!所以IoC也称DI(依赖注入)对象的创建和维护依赖于外部容器.
class UserService{
private UserDao userDao = new UserDaoImpl(); //让业务层与数据访问层耦合在一起,不利用以后模块的替换.
private UserDao userDao_IoC = null;
public void SetUserDao(UserDao userDao){
this.userDao_IoC = userDao
}
public void save(User user){
userDao.save(user);
}
}
AOP(Aspect Oriented Programming):面向切面编程。就是把一些贯穿在各个模块之间相同的功能抽象出来,然后封装成一个面。
AOP一般都是通过代理来实现,利用代理就有目标对象是什么,拦截哪些点(方法),拦截后要做什么。
JoinPoint(连接点):被拦截到的点. Advice(通知):拦截JoinPoint之前与之后要做的事。
PointCut(切入点):对joinPoint进行拦截的定义。Target(目标对象):代理的目标对象。
对于异常处理,日志功能,权限的检查,事务等都是贯穿到各个模块之中,因此进行AOP.
代理技术有面向接口和生成子类.
public Object getProxy(final Object targetObj) {
Obejct obj = Proxy.newProxyInstance(
targetObj.getClass().getClassLoader(), //被代理类的类加载器
targetObj.getClass().getInterfaces(), //被代理类接口的字节码
new InvocationHandler() { //类似于一个回调函数 代理功能就在里面实现
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{
try{
beforeAdvice(); //前置通知
method.invoke(targetObj, args); //拦截的点
afterAdvice(); //后置通知
}catch (Exception e) {
exceptionAdvice(); //异常通知
}finally{
finalAdvice(); //必须执行通知
}
return obj;
}
});
}
还一个用子类实现的同理 要采用CGlib库来实现 JDK6之前未提供,估计JDK以后会提供。
这就是spring的2大原理,自如怎么配置,那就要花点时间去学,原理思想掌握了哪些配置方法随便学下就明白了。
相关文章推荐
- Spring init-method和destroy-method 的使用
- eclipse+pydev开发环境搭建
- Spring框架源码学习---DI的实现
- Java基础学习之final和多态及类型转换
- Java实现基于内容的数字图像处理代码
- Spring AOP之动态代理原理解析
- Spring boot 学习笔记 ---分分钟构建一个web程序(一)
- 在Eclipse里修改已建立的android工程的图标
- Selelnium2//用Java调用不同浏览器代码
- 【Java高级】JVM内存区域模型和加载过程
- Spring框架核心理论 AOP|DI
- Java基础全面解析——Java语言基础
- Java基础全面解析——Java语言基础
- 关于Java的权限修饰符(public,private,protected,默认friendly)
- Spring发展历程总结
- java中的反射机制
- [JavaWeb基础] 008.Spring初步配置
- Java之final的解析
- jdbcType与javaType的对应关系
- JAVA大数处理(BigInteger,BigDecimal)