Spring
ioc
控制反转loC(Inversion of Control),是-种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法。 没有IoC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。
控制反转是一-种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI) .
bean在配置文件中就相当于new 了一个对象
value:具体的值,基本数据类型
ref:Spring容器中创建好的对象
在getBean的时候会把配置文件中的bean都初始化。
bean的属性
name:可以为bean配置别名,可以是多个
依赖注入:
构造器注入:在初始化对象的时候在构造方法中注入
<bean>
<constructor-arg name="" ref="" value=""/>
</bean>
或者引入c命名空间:xmlns:c=“http://www.springframework.org/schema/c”
<bean c:属性名=""></bean>
前提是需要pojo中有无参有参构造方法
set注入:
<bean>
<property name="" ref="" value=""/>
</bean>
或者引入p命名空间:xmlns:p=“http://www.springframework.org/schema/p”
<bean p:属性名=""></bean>
bean的作用域:
单例模式:每次从容器get的时候都是同一个对象
<bean scope="singlton"></bean>
原型模式:每次从容器get的时候,都会重新生成对象
<bean scope="propotype"></bean>
其余作用域适用于web开发:
request、session、application
applicationContext:应用程序上下文。 个人理解为程序运行环境、容器
自动装配
bean的autowire属性,取值byName、byType
byName能够在spring容器中获取id和自己对象的属性同名的bean
byType能够在spring容器中获取类型和自己对象的属性类型相同的bean.
使用注解自动装配:@Autowired
前提:1.导入约束:context约束
2.在配置文件中开启注解支持:
<context:annotation-confing/>
使用之后不需要写set方法
@Autowired(required=false)//required值为false的话表示被这个注解标注的属性可以为null
@Qualifier(value="")//可以和@Autowired组合使用,作用是注入id与value值相同的bean
spring4之后使用注解开发需要依赖aop
<!--指定要扫描的包,这个包下的注解就会生效-->
<context :component- scan base-package=""/>
纯注解开发
在一个类前面使用@Confinguration表示这个类相当于spring的配置文件(application.xml),或者。在这个配置类里面的方法上面加上@Bean注解相当于配置文件里面的方法名为bean的id,返回值是bean的class,return返回的是要注入到bean 中的内容。
@Component使用在类上,表示将这个类交给spring管理,相当于,类名就是id。其在mvc三层架构中又衍生出三种:
dao:@Repository service:@Service controller:@Controller
Spring AOP:面向切面编程
个人见解:
AOP是在不改变原来代码基础的情况下对原来代码的增强,例如添加一些功能,原理应该是基于动态代理模式实现的。所谓面向切面编程是把原来的项目想象成纵向,切面就是在这个纵向项目的某个点增加一些功能,并且不修改原代码,且不影响原来代码功能的实现。所以我认为AOP适用于对项目完成之后的增加功能。以上仅是个人见解,如有不足,请多多指正。
配置方式:
<aop:config>
<!--配置切入点 -->
<aop:pointcut expression="" id=""/>
<!-- 配置切面-->
<aop:aspect id="" ref="">
<!-- 配置前置通知 -->
<aop:before method="" pointcut-ref=""/>
<!-- 配置后置通知 -->
<aop:after-returning method="" pointcut-ref=""/>
<!-- 配置异常通知 -->
<aop:after-throwing method="" pointcut-ref=""/>
<!-- 配置最终通知 -->
<aop:after method="" pointcut-ref=""/>
<!-- 配置环绕通知 -->
<aop:around method="" pointcut-ref=""/>
</aop:aspect>
</aop:config>
method:指定通知中方法的名称。 pointct:定义切入点表达式 pointcut-ref:指定切入点表达式的引用.异常和后置通知只能执行一个
用注解方式使用AOP需要:
- 在配置文件中导入 context 的名称空间
- 开启 spring 对注解 AOP 的支持
<aop:aspectj-autoproxy/>