1、使用XML装配JavaBean,根据定义的信息去创建并注入依赖的属性
<!--default-autowire设置自动装载JavaBean依赖属性的方式:no(不自动注入),byName(根据名字自动装配),byType:根据属性的类型自动装配,contructor:根据构造方法的参数注入,autodetect自动检测注入 -->
<!--default-dependency-check当要实例化一个JavaBean时,检测这个的一来属性,如果没背实例化,就先去实例化以来的属性,no:不检测,simple:基本数据类型,object:如果是另一个Bean就先检测并实例化哪个Bean,all:检测simple和objects --><!--default-destroy-method默认销毁方法 -->
<!--default-init-method:默认初始方法 -->
<!--default-lazy-init:延迟加载方式 ,若为true则会在Instance.getBean()时在创建实例,而非创建实例->调用setter()->再调用propertyName(getBean()) -->
<beans default-autowire="no" default-dependency-check="none" default-lazy-init="false" default-destroy-method="destroyMethod" default-init-method="initMethod">
<description>
随便写点什么,有意义的,用于描述当前的配置文件
</description>
<import resource="xxx.xml"/><!--导入其他配置文件 -->
<bean id="beanName" class="package.class" singleton="false" autowire=" " depends-on="" init-method="初始化方法" destroy-method="注销方法" factory-method="工厂方法,需是静态的并返回实例" factory-bean="工厂类,与前面那个一起用" ><!--id是名字,class是类的信息即位置 -->
<contructor-arg>
<value>构造方法传递的参数</value>
</contructor-arg>
<contructor-arg index="参数位置索引可省" type="参数类型可省">
<value>构造方法传递的参数</value>
</contructor-arg><!--使用构造方法时,先Resource rs=new ClassPathResource("applicationContext.xml"); 然后BeanFactory bf=new XmlBeanFactory(rs); 接着Class name=(Class)bf.getBean("Bean的id");-->
</bean>
<!--先Resource rs=new ClassPathResource("applicationContext.xml"); 然后BeanFactory bf=new XmlBeanFactory(rs); 接着Class name=(Class)bf.getBean("Bean的id");-->
<!--赋值标签:<value>xxxx</value> <ref bean="BeanName"> <null/>空值 <list><value>xx</value></list> <set><ref bean="arg"/><value></value></set> <map><entry key="key1"><value>value</value></map> <props><prop key="key1">value1</prop></props> -->
<!--匿名内部装配XML不用id或name
-->
<bean id="beanName" class="package.class" singleton="false" autowire=" " depends-on="" init-method="初始化方法" destroy-method="注销方法" factory-method="工厂方法,需是静态的并返回实例" factory-bean="工厂类,与前面那个一起用" ><!--id是名字,class是类的信息即位置 -->
<property name="xx">
<value>xx</value>
</property>
<property name="xx">
<value>xx</value>
</property>
</bean>
</beans>
2、BeanPostProcessor接口的定义,在初始化阶段,容器会查看是否实现,并分别调用两个方法,实现预处理和后处理
public interface BeanPostProcessor {
//在初始化之前调用,定义预处理的业务逻辑或初始化数据
Object postProcessBeforeInitialization(Object bean,String beanName)throws BeansException ;
//在初始化之后调用,在预处理操作之后来检查或修改JavaBean的属性配置,增添过滤等
Object postProcessAfterInitialization(Object bean,String beanName)throws BeansException;
//实现接口之后,要调用addBeanPostProcessor()注册
}
3、创建ApplicationContext容器,三种方法
String configLocation = null;
Resource rs=new ClassPathResource("applicationContext.xml");
ApplicationContext context=new ClassPathXmlApplicationContext(configLocation);//读取当前类路径的配置文件并装载
ApplicationContext context2=new FileSystemXmlApplicationContext(configLocation);//通过参数指定配置文件的位置
ApplicationContext context3=new XmlWebApplicationContext();//如果实现了ApplicationContextAware接口就会调用Javabean的setApplicationContext()方法
XmlBeanFactory bf=new XmlBeanFactory(rs);
//在容器内注册BeanPostProcessor的实例来对JavaBean进行处理
BeanPostProcessorExample bp=new BeanPostProcessorExample();
bf.addBeanPostProcessor((BeanPostProcessor) bp);//在容器中注册
LogFile lf=(LogFile)bf.getBean("log");
public class BFA implements BeanFactoryAware{
XmlBeanFactory beanFactory;
@Override
public void setBeanFactory(BeanFactory bf) throws BeansException {
beanFactory=(XmlBeanFactory)bf;
beanFactory.getBeanDefinitionNames();//获得所有JavaBean名字的一个数组
beanFactory.getSingletonNames();//获得所有单例Bean的名字的数组
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
public class ACA implements ApplicationContextAware{
ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext ac) throws BeansException {
context=ac;//自动获取容器的引用
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
public class beanName implements BeanNameAware{
String name;
@Override
public void setBeanName(String string) {
//容器会将JavaBean的名字作为属性注入到javaBean
name=string;
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
4、事件的监听
public class event extends ApplicationEvent{
public event(Object source) {
super(source);
}
}
class listener implements ApplicationListener{
//判断e的类型是何种时间并完成相应的处理
@Override
public void onApplicationEvent(ApplicationEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}