spring两大核心:IOC和AOP之详细学习

spring核心:
IOC、AOP

1.IOC概念和原理
什么是IOC
(1)控制反转,把对象的创建和对象之间的调用过程,交给spring来实现
(2)使用IOC的目的:降低耦合度;

2.IOC底层原理

2.1 IOC的发展历程:
	1.最原始的方式:例如:UserService调用UserDao的方法时,是在UserService中创建UserDao的对象,然后调用UserDao的方法;但这种方式耦合度较高;一旦UserDao发生改变,UserService就需要做出改变,所以出现了工厂类
	2.工厂类创建对象:通过工厂类创建对象,然后调用工厂类的方法类调用UserDao类中的方法,这样减低了UserService和UserDao的耦合度,但是这样耦合度还是不够低,所以出现了IOC
	3.IOC创建对象
		1.xml解析、工厂模式、反射
		IOC过程
		a.首先通过配置文件,配置要创建的对象
		b.创建工厂类:	通过xml解析获取“class”属性:即得到类的路径String classValue=class属性值
				通过反射创建对象:Class className=Class.forName(classValue);得到字节码文件
				className.newInstance();   创建新实例
2.2 IOC接口
	1.IOC思想是基于IOC容器完成,容器本身就是工厂类
	2.Spring提供IOC实现的两种方式(两个接口)
		(1)BeanFactory                                  内部使用,不提供给开发人员进行使用;加载配置文件时不会创建对象,只有在获取的时候才会创建对象
		(2)ApplicationContext	              BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员使用;在加载配置文件时就创建对象

3.IOC操作Bean管理
1.什么是Bean管理
(1)Spring创建对象
(2)Spring注入属性
2.Bean管理操作有两种方式
(1)基于XML配置文件方式实现
创建对象:在spring配置文件中使用Bean标签,在标签内添加对应属性,就可以实现对象创建
Bean属性:
id 标识
class 要创建的类所在的全路径
name Struct1中用,现在不怎么用
创建对象时,默认也是执行无参构造方法完成对象的创建
注入属性:
(1)DI:依赖注入:就是注入属性(创建对象的基础之上注入属性)
第一种:使用set方法
第二种:有参构造注入

		1.字面量
			null
			属性值含有特殊字符1.使用转义字符   &lt; <  &gt;   >     <![CDATA[<<南京>>]]>

Bean的作用域:在Spring可以设置创建Bean实例是单实例还是多实例
scope:
singleton:加载配置文件时就创建对象:单实例
prototype:加载配置文件时不创建对象,在调用getBean()方法时才创建对象:多实例
IOC操作Bean管理(bean生命周期)
1.通过构造器创建bean实例(无参构造方法)
2.为bean属性设置值和对其他bean引用(调用set方法)
3.调用bean的初始化方法(需要配置初始化的方法)
4.bean可以用使用(对象获取到了)
5.当容器关闭的时候,调用bean的销毁方法(需要配置销毁的方法)

IOC操作Bean管理(xml自动配置)

autowire:
byName
byType:同一类型不能创建多个对象

	(2)基于注解方式实现
		使用注解的目的:简化xml配置
		Spring针对Bean管理中创建对象提供的注解
			1.@Component      普通组件
			2.@Service	service层
			3.@Controller	web层	
			4.@Repository	dao层
			都可以用用来创建bean实例
		基于注解方式实现属性注入:
			1.@Autowired:根据属性类型进行注入
			2.@Qualifier    根据属性名称进行注入
			3.@Resource   根据类型就行注入,也可以根据根据名称进行注入
			4.@Value:     注入普通类型属性
	完全注解方式:代替xml配置

AOP
什么是AOP
(1)AOP:面向切面编程:利用AOP可以对业务逻辑的各个部分进行隔离,使得业务逻辑各个部分之间的耦合度降低,提高程序的可重用性,同时也提高了开发的效率。
(2)通俗的讲:在不改变源代码的情况下,在主干功能里添加新功能;
底层原理:
1.AOP底层使用动态代理
a.有接口情况:使用JDK动态代理
创建接口实现类代理对象,增强类的方法
b.没有接口情况:使用CGLIB动态代理
创建当前类子类的代理对象,增强类的方法
AOP术语:
1.连接点:类中的哪些方法可以被增强,这些方法就成为连接点
2.切入点:实际被增强的方法
切入点表达式:execution(权限修饰符返回类型类全路径方法名称(参数列表))权限修饰和返回类型用*
某一类中某一方法:execution(* 全类名.方法名(…))
某一类中所有方法:execution(* 全类名.(…))
某一包中所有类的所有方法:execution(
包名..(…))
3.通知(增强):
1.实际增强的逻辑部分成为通知(增强)
通知类型:五种
@Before前置通知、
@AfterReturning后置通知 :返回结果后才执行;如果有异常就不执行
@After 最终通知:一定被执行
@Around环绕通知、
@AfterThrowing 异常通知 有异常时才执行
4.切面:是动作,把通知应用到切入点的过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值