1.读取配置文件,beans.xml:注意beans.xml的写法:如果放到根目录下,那么直接写beans.xml,如果放到子目录下,子目录名/beans.xml。
2.实例化bean工厂对象,载入xml资源:工厂负责管理bean组件的目前是管理当前xml资源中的bean。
3.常用ClassPathXmlApplicationContext 直接代替上面两步。
3.通过bean工厂对象得到你要找的bean实例。
//ClassPathResource resource=new ClassPathResource("beans.xml");
//XmlBeanFactory factory=new XmlBeanFactory(resource);
ClassPathXmlApplicationContext factory=new
ClassPathXmlApplicationContext("beans.xml");
Hello hello=(Hello)factory.getBean("hello");
1、构造器注入<constructor-arg>和set注入<property name="model">。
<bean id="view" class="test.ViewImp">
<constructor-arg>
<ref bean="model"></ref>
</constructor-arg>
<property name="model">
<ref bean="model"></ref>
</property>
</bean>
2、map类型的注入。scope 默认是"singleton" 单例,"prototype"非单例。
<bean id="ioc" class="test.mapAImp" scope="prototype">
<property name="map">
<map>
<entry key="1">
<value>a</value>
</entry>
<entry key="2">
<value>b</value>
</entry>
<entry key="3">
<value>c</value>
</entry>
</map>
</property>
</bean>
3、工厂方法,静态工厂
<bean id="name" class="factory.GetNameFactory" factory-method="createName" >
<constructor-arg>
<value>test</value>
</constructor-arg>
</bean>
4、bean的装配和管理
继承属性:<bean Parent>
若干个bean,共有一个属性,使用继承
A类:a,b属性已经set或通过构造方法(属性a,属性b)设置好
B类:也有a,b同名属性
那么在beans.xml中使用<bean Parent>,B 继承 A就可以了,不用在xml中从新设置
抽象属性:<bean abstract="true|false">
不能得到该类的实例
自动装配bean:
自动设置依赖关系:例如:A类持有B类的引用,引用属性名字和xml中的B类的id名字相同,那么会自动装配好
autowire="byName|byType|constructor"
byName:属性—id 推荐
byType:找类名匹配,存在问题,当一个类多次出现会报错
constructor:根据构造方法类型匹配
依赖检查:dependency-check="all"
检查所有的set方法是否都被调用了,例如:如果有属性缺少set方法,那么会报异常
生命周期方法定制:
两种方式:1.使用bean属性 2.实现接口(不推荐,框架侵入性强:依赖API)
在构造方法和依赖注入set后调用init,结束时调用destroy。
<bean id="b" class="test.AImp" autowire="byName" parent="a" dependency-check="all" init-method="init" destroy-method="destroy" >
5、获取bean信息,需要实现以下2个接口
BeanFactoryAware ,获取bean的工厂对象
BeanNameAware ,获取bean的实例名,即配置文件的id
6、aop
在bean构造前,和初始化后添加处理,需要实现BeanPostProcessor接口
7、对bean的属性值进行包装
test.DateEditor继承PropertyEditorSupport,重写setAsText,getValue方法。
<bean id="a" class="test.AImp">
<property name="date">
<value>2001/10/3</value>
</property>
</bean>
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.Date">
<bean class="test.DateEditor"/>
</entry>
</map>
</property>
</bean>
8、属性覆盖
<bean class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
<property name="location">
<value>test.properties</value>
</property>
</bean>
test.properties:
bean的id.属性名=value
9、ApplicationContext
ApplicationContext用来发布事件
ApplicationEvent为事件的抽象类,需要继承此类声明一个事件对象
ApplicationListener监听器监听是否有事件发生,当ApplicationContext发布事件后,会调用实现了此接口的bean中的onApplicationEvent()方法
事件bean实现ApplicationContextAware的类可获得ApplicationContext
10、消息文件的绑定
有文件message.properties.
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>message</value>
</list>
</property>
</bean>
11、反射构建bean
<bean id="props" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="java.lang.System"></property>
<property name="targetMethod" value="getProperties"/>
</bean>
<bean id="classpath" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject"><ref local="props"/></property>
<property name="targetMethod" value="getProperty"></property>
<property name="arguments">
<value>java.class.path</value>
</property>
</bean>
获取方法的返回值
String classpath = (String)factory.getBean("classpath");
System.out.println(classpath);
获取方法返回值的工厂
FactoryBean o =(FactoryBean)factory.getBean("&classpath");
String classpath2 = (String)o.getObject();
System.out.println(classpath2);
12、aop1
StaticMethodMatcherPointcut 切入点
MethodBeforeAdvice 调用之前
MethodInterceptor 方法拦截,动态代理
AfterReturningAdvice 返回值拦截
ThrowsAdvice 异常拦截
<bean id="befadvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="advice">
<ref local="secuity"></ref>
</property>
<property name="pointcut">
<ref local="pointcutimpl"></ref>
</property>
</bean>
<bean id="factory" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target">
<ref bean="bean"></ref>
</property>
<property name="interceptorNames">
<list>
<value>advice</value>
</list>
</property>
</bean>
参看:http://www.360doc.com/content/08/0721/01/15822_1451898.shtml