您的位置:首页 > 编程语言 > Java开发

关于对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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: