Spring4笔记--IOC

一、配置bean

1.使用xml <bean>标签

2.使用注解

配置自动扫描组件:<context:component-scan  base-package="" resource-pattern=""  use-default-filters="">

(1)base-package扫描指定包,resource-pattern扫描该包下指定资源;

(2)component-scan下可以使用<context:include-filter type="annotation"expression=""/>指定包含哪些注解(如果指定只包含,其他不行,需要配合使用use-default-filters="false"),<context:exclude-filter type="annotation" expression=""/>排除哪些注解;

二、属性赋值

XML:

1.使用<property>:<bean>下面增加节点<property name="" value="" ref="">或者property下面可以增加<value>节点(如果赋值有特殊字符可以用<![cdata[ ]]>)

2.使用构造器<constructor-arg>:<bean>下面增加节点<constructor-arg>

3.级联赋值:为其引用对象的属性赋值<property name="id.name" value="" >(注意引用对象要先初始化)

4.赋值集合属性<property name="">下使用<list><map><set>

注解:

@Value

三、自动装配

1.xml中使用<bean autowire="byType"> byType或者byName

2.注解使用@Autowired或者@Resource、(使用注解在字段上这样就不用写setter方法了

(1)@Autowired默认按类型装配

(2)@Resource属于javaee默认按照名字装配

3.缺点(对于xml配置):

Autowired配置在bean上,会使得这个bean的所有引用对象都自动装配,不够灵活;Autowired要么根据类型要么根据名字装配,不能两种兼容;对于xml配置方式来说,使用手动装配更明确清晰;

四、bean的作用域名

配置作用域方式可以使用xml的<bean  scope="">和注解@scope,具体有以下几种:

singleton :默认是单例的,容器中只会存在一个共享的bean实例,加载配置时实例

prototype:原型,每一次从容器中获取bean,都会产生一个新的bean实例,使用时实例

request:表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效

session:表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效

global session:只有应用在基于porlet的web应用程序中才有意义,它映射到porlet的global范围的session,如果普通的servlet的web 应用中使用了这个scope,容器会把它作为普通的session的scope对待。

五、使用外部属性文件

主要是使用spring的PropertyPlaceholderConfigurer类,xml中配置

<context:property-placeholder location="classpath:jdbc.properties"/>,其他引用使用${}

六、SpEL

Spring 表达式语言,SpEL格式为#{ SpEL expression },支持文本表达式;布尔类和关系操作;正则表达式;访问属性、数组、集合和map;赋值操作;三元操作等等。

七、bean生命周期

Spring容器 生命周期管理过程

-通过构造器或者工厂方法创建bean实例

-为bean属性赋值和对其他bean引用

-调用bean的初始化方法(xml:init-method    注解:@PostConstruct

-可以使用bean

-容器关闭调用bean的销毁方法(xml:destroy-method  注解:@PreDestroy

八、新特性:泛型依赖注入


九、Sping IOC实例化流程

1.ResourceLoader从存储介质中加载Spring配置信息,并使用Resource表示这个配置文件的资源;
2.BeanDefinitionReader读取Resource所指向的配置文件资源,然后解析配置文件。配置文件中的每一个解析成一个BeanDefinition对象,并保存到注册表BeanDefinitionRegistry中;
3.容器扫描注册表BeanDefinitionRegistry中的BeanDefinition,使用Java的反射机制自动识别出Bean工厂处理器(实现BeanFactoryPostProcessor接口)的Bean,然后调用这些Bean工厂后处理器对BeanDefinitionRegistry中的BeanDefinition进行加工处理;
4.Spring容器从BeanDefinitionRegistry中取出加工后的BeanDefinition,并调用InstantiationStrategy着手进行Bean实例化工作;
5.在实例化Bean时,Spring容器使用BeanWrapper对Bean进行封装,BeanWrapper提供了很多以Java反射机制操作Bean的方法,它将结合该Bean的BeanDefinition以及容器中属性编辑器,完成Bean属性的设置工作;
6.利用容器中注册的Bean后处理器(实现BeanPostProcessor接口的Bean)对已经完成属性设置工作的Bean进行后续加工,直接装配出一个准备就绪的Bean。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值