spring中ioc和aop(SpringIOC和AOP介绍)
Spring介绍
1.spring是轻量级的开源的JavaEE框架
2.Spring可以解决企业应用开发的复杂性
3.Spring有两个核心部分:IOC 、AOP
(1)IOC:控制反转 ,把创建好的对象给Spring进行管理
(2)AOP:面向切面编程 ,不修改源代码的情况下进行功能增加 。
Spring特点
1.方便解耦,简化开发 。
2.AOP支持
3.方便程序测试
4.方便和其他框架整合
6.降低了API开发难度
IOC
IOC底层原理和基本概念
inversion for control 控制反转 。把对象创建和对象之间的调用过程 ,交给spring进行管理 。
使用目的:为了耦合度降低 。
耦合度:也就是两个方法之间的关联程度 ,越小越好 。
类似于图下 ,如果我去修改了UserDao中的add方法 ,那么Service层中的方法也需要去修改 。 但是当我们去使用了工厂模式 ,就会去降低耦合度 。
ioc接口 BeanFactory
1 、Ioc思想基于IOC容器完成 ,ioc就是对象工厂 。
2、spring提供ioc容器实现两种方式:(功能相似)
(1)**.beanFactory**:ioc容器基本实现 ,是spring自带 内部使用的 ,不提供给开发人员使用。
* 加载配置文件的时候 ,不会去创建对象 。在获取对象(使用)才去创建对象 。 什么时候用 什么时候创建对象。
(2)ApplicationContext:是BeanFactory接口的子接口,提供更强大的功能 ,由开发人员使用 。
* 加载配置文件的时候 ,就会去创建对象 。
常见的依赖注入三种方式
1 、set方法进行注入
(在bean中创建属性和创建set方法)
1.创建类,生成属性的set方法
2.在配置文件中创建对象 ,后使用set方法注入属性
<bean id="book" class="com.cztu.tdj.spring5.Book"> <property name="bname" value="tdj"></property> <property name="bauthor" value="javaSpring"></property> </bean>2 、使用有参构造进行注入
(1)创建类 ,定义属性,创建属性的有参构造
(2)在spring的配置文件中注入
<bean id="orders" class="com.cztu.tdj.spring5.Orders"> <constructor-arg name="oname" value="拼多多"></constructor-arg> <constructor-arg name="address" value="120"></constructor-arg> //也可以基于index属性注入 ,0代表有参构造第一个属性 <constructor-arg index=1 value="120"></constructor-arg> </bean>使用注解test时 ,类必须为public ,方法也必须是public!!!
3 、p名称空间注入
(1)使用p名称空间注入 ,可以简化基于xml配置方式
1添加p名称空间在配置文件中 xmlns:p="http://www.springframework.org/schema/p" 2使用set方法注入 <bean id="book" class="com.cztu.tdj.spring5.Book" p:bauthor="汤冬江" p:bname="javapy"/>Bean管理(FactoryBean)
1 、Spring有两种类型Bean ,一中普通bean ,还有一种是工厂bean。
2.普通bean:在配置文件中 ,定义的类型就是返回的类型 。**
3.工厂bean:在配置文件中 ,定义的类型可以和返回类型不一样 。
bean作用域:
prototype 、singleton 、session 、request
singleton 和prototype区别:
(1)singleton是单实例 ,prototype 是多实例对象
(2)设置scpe值为singleton时,加载spring配置文件时会创建单实例对象 。
(3)设置scpe值为prototype时 ,不是加载spring配置文件时会创建实例对象 ,而是用getBean时才去创建对象
Spring针对bean管理中创建对象提供注解**
(1)@Component
(2)@Service
(3)@controller
(4)@Repository
功能一样,都是创建bean实例 。但是他们用到不同地方 。
AOP
AOP:面向切面编程 。不通过修改源代码的方式 ,在主干功能里添加新功能 。
aop底层原理
1 、aop底层使用了动态代理
(1)有两种情况的动态代理:
1 、有接口的情况 ,使用jdk动态代理
·创建接口实现类对象,去增强类中的方法
2、没有接口的情况 ,使用CGLIB动态代理
创建子类的代理对象 ,去增强类中的方法
aop动态代理实现(jdk)
1 、使用jdk动态代理 ,使用Proxy类里的方法创建代理对象
newProxyInstance其中的三个参数:(1)类加载器;(2)增强方法的所在类 ,这个类实现的接口 ,支持多个接口;(3)实现这个接口InvocationHandler ,创建代理对象 ,写增强的方法
2 、jdk动态代理代码
(1)创建接口 ,定义方法
(2)创建接口实现类 ,实现方法
(3)使用proxy类c
基于匿名内部类实现接口;
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!