Spring

继承树
BeanFactory(接口)
—DefaultListableBeanFactory(实现类)
—ApplicationContext(接口)
——FileSystemXmlApplicationContext(实现类)
——ClassPathXmlApplicationContext(实现类)
——AnnotationConfigWebApplicationContext(实现类)


注入方式
1. 构造注入(通过反射调用构造器时传递参数)
2. 设值注入(通过反射调用setter方法时传递参数)


国际化
ApplicationContext继承了MessageSource接口,其中响应的方法的调用依赖于id为messageSource的bean(常用ResourceBundleMessageSource这个实现类),如ctx.getMessage(String code,Object[] args[],Locate loc)


事件机制
事件:ApplicationEvent(事件必须由容器触发,ctx.publishEvent(eve))
监听器:ApplicationListener(只要配置在容器中就会起用,不需要注册等操作)
内置事件:ContextRefreshEvent、ContextStartEvent、ContextCloseEvent、ContextStopedEvent、RequestHandledEvent等。


BeanFactoryAware
bean实现这个接口后,spring会用容器本身作为参数调用相应的方法,如在web应用中经常采用声明式配置方式,通过listener将生成Spring的容器对象放置到servletContext中,此时就可以通过此种方式获得容器的引用。


bean的作用域
scope
singleton、prototype、request(Web)、session(Web)、global session(Web)。为了让request等作用域生效,需要将http请求对象绑定到相应的线程上,让bean实例能在后面的调用链中被访问到,可以配置listener或者filter来实现(SpringMVC不用)


自动装配
autowrite:no、byName、byType、constructor、autodetect
autowrite-candidates:true、false 是否会注入到别的bean


注入嵌套bean
如果不希望bean被容器访问,可以使用嵌套的方式

<property name="person">
    <bean class="com.wang.Person" />
</property>

注入集合
list、map、set 都可以

<property name="collectionExample">
    <set>
        <value>普通的字符串</value>
        <bean class="org.crazyit.app.service.impl.SteelAxe"/>
        <ref bean="stoneAxe"/>
        <list>
            <value>20</value>
            <set>
                <value type="int">30</value>
            </set>
        </list>
        <props>
            <prop key="血压">正常</prop>
            <prop key="身高">175</prop>
        </props>
        <map>
            <entry key="数学" value="87"/>
            <entry key="英语" value="89"/>
            <entry key="语文" value="82"/>
        </map>
        <list>
            <value>小学</value>
            <value>中学</value>
            <value>大学</value>
        </list>
    </set>
</property>

组合属性
除了最后一个属性外都不可以是null 如

<property name="person.name" value="zhangsan">

创建bean的方式
1. new:class : class
2. 静态工厂:class、factory-method
2. 实例工厂: factory-bean、factory-method
3. BeanFactory:class(getObject()、isSingleton()、getObjectType())


bean的继承
parent、abstract


强制初始化bean
depends-on


BeanNameAware
在bean中获取ID


bean生命周期
init-method、Initializing接口、destory-method、Disposable接口


延迟初始化
ApplicationContext会默认
初始化所有的singleton,可以用lazy-init=”true”取消这中行为


协调不同作用域的bean
look-up属性: Spring通过使用CGLIB修改客户端代码,实现了为Bean修改look-up所指定的方法,默认方法体室返回当前容器中的bean


高级依赖关系配置
FieldRetrievingFactoryBean:可访问类静态Field或对象实例的Field值,所获的值可以注入其他bean,也可以直接定义为新的bean。
MethodInvokingFactoryBean:获得方法的返回值,所获的值可以注入其他bean,也可以直接定义为新的bean。
PropertyPathFactoryBean:用来获取目标bean的属性值,所获的值可以注入其他bean,也可以直接定义为新的bean。


bean后处理器
BeanPostProcessor(接口):常用来生成代理等
Object postProcessBeforeInitializing(Object bean,String name)
Object postProcessAfterInitializing(Object bean,String name)


容器后处理器
BeanFactoryProcessor(接口):在初始化容器中其余bean之前起作用,常用来设置属性址,覆盖属性值,动态的注入bean(BeanDefinitionRegistry)等
postProcessorBeanFactory(ConfigurableLisListableBeanFactory beanfactory)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值