关于对Spring中IOC与AOP的理解
2017-08-10 10:08
471 查看
关于对Spring中IOC与AOP的理解
Spring框架用过很多次,一直对它的一些功能不是很了解,最近仔细研究了一下。
IOC(控制反转):控制反转,顾名思义就是一个控制权的转向问题,就比如皇帝管着臣子,有一天有一个臣子篡权夺位,臣子开始管理皇帝和其他人,这就一个控制反转。有反转就意味着有正转,正转就是哪里需要对象,就在哪里去new对象。例如:老师想要获得学生的英语成绩,那就要new学生对象,利用学生去获取成绩。
代码:
public class Teacher{
public int getEnglishScore(){
Student student=new Student();
int score=student.getEnglish();
return score;
}
}
在Spring中,控制反转就是将创建对象的权利交给Spring容器去管理。程序员只需要去调用就可以了。如上例,只需要在spring.xml中去声明
spring.xml(setter注入):
<bean id="stu" class="com.school.bean.Student"></bean>
<!--声明学生bean-->
<bean id="teacher" class="com.school.bean.Teacher">
<!--声明老师bean-->
<property name="student" ref="stu"></property>
<!--将学生bean注入只老师bean中-->
注意:property标签中的name值要与代码中的setter的值一样,ref的值要与声明的id一致!!!
</bean>
public class Teacher{
private Student student;
public void setStudent(Student student){
this.student=student;
}
public int getEnglishScore(){
int score=student.getEnglish();
return score;
}
}
AOP(面向切面编程):面向切面在我理解为就是将一个圆柱体从想要插入的地方切开,然后将自己想要增加的功能放进去。
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* com.school.bean.Teahcer.getEnglishScore())"/>
<!--配置切点,定义在哪里切。像本例一样,在执行老师获取英语成绩时,定义一个切点-->
<aop:aspect id="tAop" ref="stu">
<!--定义切面,即为在老师获取英语成绩时添加功能-->
<aop:before method="getStudentName()" pointcut-ref="pointcut"/>
<!--在老师获取英语成绩之前,获得学生的姓名-->
</aop:aspect>
</aop:config>
还有一个通知
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--定义一个通知,将通知中执行的方法与事务相关联,以事务的形式去执行-->
<tx:method name="get*"
propagation="REQUIRED" />
</tx:advice>
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* com.school.bean.Teahcer.getEnglishScore())"/>
<!--配置切点,定义在哪里切。像本例一样,在执行老师获取英语成绩时,定义一个切点-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
<!--定义一个通知器,当执行到切点时,会触发通知,此时的通知就相当于增加的功能,即增强-->
</aop:config>
Spring框架用过很多次,一直对它的一些功能不是很了解,最近仔细研究了一下。
IOC(控制反转):控制反转,顾名思义就是一个控制权的转向问题,就比如皇帝管着臣子,有一天有一个臣子篡权夺位,臣子开始管理皇帝和其他人,这就一个控制反转。有反转就意味着有正转,正转就是哪里需要对象,就在哪里去new对象。例如:老师想要获得学生的英语成绩,那就要new学生对象,利用学生去获取成绩。
代码:
public class Teacher{
public int getEnglishScore(){
Student student=new Student();
int score=student.getEnglish();
return score;
}
}
在Spring中,控制反转就是将创建对象的权利交给Spring容器去管理。程序员只需要去调用就可以了。如上例,只需要在spring.xml中去声明
spring.xml(setter注入):
<bean id="stu" class="com.school.bean.Student"></bean>
<!--声明学生bean-->
<bean id="teacher" class="com.school.bean.Teacher">
<!--声明老师bean-->
<property name="student" ref="stu"></property>
<!--将学生bean注入只老师bean中-->
注意:property标签中的name值要与代码中的setter的值一样,ref的值要与声明的id一致!!!
</bean>
public class Teacher{
private Student student;
public void setStudent(Student student){
this.student=student;
}
public int getEnglishScore(){
int score=student.getEnglish();
return score;
}
}
AOP(面向切面编程):面向切面在我理解为就是将一个圆柱体从想要插入的地方切开,然后将自己想要增加的功能放进去。
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* com.school.bean.Teahcer.getEnglishScore())"/>
<!--配置切点,定义在哪里切。像本例一样,在执行老师获取英语成绩时,定义一个切点-->
<aop:aspect id="tAop" ref="stu">
<!--定义切面,即为在老师获取英语成绩时添加功能-->
<aop:before method="getStudentName()" pointcut-ref="pointcut"/>
<!--在老师获取英语成绩之前,获得学生的姓名-->
</aop:aspect>
</aop:config>
还有一个通知
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--定义一个通知,将通知中执行的方法与事务相关联,以事务的形式去执行-->
<tx:method name="get*"
propagation="REQUIRED" />
</tx:advice>
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* com.school.bean.Teahcer.getEnglishScore())"/>
<!--配置切点,定义在哪里切。像本例一样,在执行老师获取英语成绩时,定义一个切点-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
<!--定义一个通知器,当执行到切点时,会触发通知,此时的通知就相当于增加的功能,即增强-->
</aop:config>
相关文章推荐
- Spring特点中关于DI,IOC及AOP的个人理解
- Spring特点中关于DI,IOC及AOP的理解
- Spring特点中关于DI,IOC及AOP的个人理解
- Spring面试,IoC和AOP的理解
- Spring面试:IOC和AOP的理解
- 初学spring 关于IOC与AOP 使用的设计模式
- 深入理解Spring的两大特征(IOC和AOP)
- Spring面试,IoC和AOP的理解, @Transactional原理及使用
- Spring面试:IOC和AOP的理解
- 深入理解Spring的两大特征(IOC和AOP)
- Spring面试,IoC和AOP的理解
- Spring之IOC、AOP的理解
- Spring中IOC和AOP的理解说明
- 深入理解Spring的两大特征(IOC和AOP)
- 理解Spring的AOP和Ioc/DI就这么简单
- 关于spring IOC和AOP的解析原理和举例
- 深入理解Spring的两大特征(IOC和AOP)
- Spring 中对IOC,AOP的理解
- spring ioc和aop理解
- Spring中IOC与AOP的理解