1.依赖注入
什么叫依赖注入:(DI)DI—Dependency Injection,Spring的里面特性
Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想
耦合度:程序中,模块及模块之间信息或参数依赖的程度。
个人理解IOC和DI
一个类里面依赖于另外一个类,然后spring把类的对象创建出来,然后注入到相应的类里面过程(理解)
通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它
在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new
object()
这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这样就会使得对象间的耦合度高了,A对象需要使用合作对象B来共同完成一件事,A要使用B,那么A就对B产生了依赖,也就是A和B之间存在一种耦合关系,并且是紧密耦合在一起,而使用了Spring之后就不一样了,创建合作对象B的工作是由Spring来做的,Spring创建好B对象,然后存储到一个容器里面,当A对象需要使用B对象时,Spring就从存放对象的那个容器里面取出A要使用的那个B对象,然后交给A对象使用,至于Spring是如何创建那个对象,以及什么时候创建好对象的,A对象不需要关心这些细节问题(你是什么时候生的,怎么生出来的我可不关心,能帮我干活就行),A得到Spring给我们的对象之后,两个人一起协作完成要完成的工作即可。
1.1 依赖注入方式
(1)普通 set方法注入(掌握)
setName(String name)
<property name="name" value="xxxx">
(2) 构造器注入(了解)
类提供一个构造器
MyBean(Integer id,String name){
}
<constructor-arg index="0" value="1"></constructor-arg>
<constructor-arg index="1" value="xx"></constructor-arg>
<constructor-arg name="id" value="1"></constructor-arg>
<constructor-arg name="name" value="yyy"></constructor-arg>
<constructor-arg type="java.lang.Long" value="18"></constructor-arg>
<constructor-arg type="java.lang.Long" value="1">
其他的属性注入:
比如List /Set Arrays Map Properties
Arrays
<property name="arrays">
<array>
<value>A</value>
<value>A</value>
<value>A</value>
</array>
</property>
1.1. 这里是咱们的重点部分,怎么配置一个Properties对象:
1.1.1. 方案一:简单,不支持中文
<property name="props1">
<value>
Jpa.dialect=org.Jpa.dialect.HSQLDialect
Jpa.driverClassName=com.mysql.jdbc.Driver
</value>
</property>
1.1.2. 方案二:支持中文
<property name="props2">
<props>
<prop key="Jpa.dialect">org.Jpa.dialect.HSQLDialect</prop>
<prop key="Jpa.driverClassName">com.mysql.jdbc.Driver中文 </prop>
</props>
</property>
(3)XML里面类的注入方式(类和类之间注入)
XML–>
XML自动注入 -->ByName ByType
全注解方式注入–> <context:compont-scan basePackage="…"> –掌握
2 AOP
AOP:他也是Spring一个特性 ,面向切面的编程
什么叫面向切面编程(AOP):(理解)
它的产生并不是去取代面向对象,而是对面向对象进行扩展,可以按照一定的方式,把类切开(切到方法上面),可以往方法前后添加一些逻辑
什么叫面向对象编程:
用一个实实在在的个体去操作数据
我们在写程序,可以把什么内容都可以看成对象,使用对象思维操作编程
AOP使用场景:(掌握)
事务管理 日志管理 性能监控 拦截器
3.AOP实现
低耦合 /松耦合:类和类直接链接程度很低
高内聚:类里面的方法 就应该完成一个事情 (save/update)
底层是通过代理模式实现 – 代理模式 JDK/ CGLIB动态代理
JDK:针对有接口情况下使用的代理模式 --优先推从–耦合度低
CGLIB:没有接口的情况下使用的代理模式 – 不要定义成final 修饰类
4.Spring的AOP的实现
xml版本aop – 练习掌握
anno版本aop–练习掌握
5.AOP代理模式
掌握概念
代理模式
静态代理:如果对多个接口或者多个方法,写很多额外的代理实现
动态代理
实现了解
动态代理 jdk(有接口) cglib(没有接口代理)