<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="hello" class="smaug.customer.service.bean.Arequest"/>
<alias name="hello" alias="hello2"/>
<alias name="hello2" alias="hello3"/>
</beans>
复制代码
启动类以下spring
public static void main(String[] args) {
ConfigurableApplicationContext cx = (ConfigurableApplicationContext) SpringApplication.run(CustomerServiceApplication.class, args);
SpringApplication springApplication = new SpringApplication(CustomerServiceApplication.class);
String configLocation = "a.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(configLocation);
System.out.println(" hello2 -> " + applicationContext.getBean("hello2"));
System.out.println("hello3 -> " + applicationContext.getBean("hello3"));
springApplication.run(args);
}
复制代码
获得以下输出bash
hello -> smaug.customer.service.bean.Arequest@4dd2ef54
hello2 -> smaug.customer.service.bean.Arequest@4dd2ef54
hello3 -> smaug.customer.service.bean.Arequest@4dd2ef54
复制代码
public class BeanTest {
public static void test() {
System.out.println("!23");
}
}
复制代码
public class BeanFactoryBean implements FactoryBean<BeanTest>{
private BeanTest beanTest;
/**
* 获取bean示例
* @return
* @throws Exception
*/
@Override
public BeanTest getObject() throws Exception {
if (Objects.isNull(beanTest)){
return new BeanTest();
}
return beanTest;
}
/**
* 返回class
* @return
*/
@Override
public Class<?> getObjectType() {
return BeanTest.class;
}
/**
* 是不是单例对象
* @return
*/
@Override
public boolean isSingleton() {
return false;
}
复制代码
xml 文件配置以下架构
beanTest1 => smaug.customer.service.controller.designMode.bean.BeanTest@5203c80f
beanTest2 => smaug.customer.service.controller.designMode.bean.BeanFactoryBean@439f2d87
复制代码
public class FactoryMethodTest {
public static HelloWorld getBean() {
return new HelloWorld();
}
}
复制代码
xml配置app
<bean id="factoryMethod" class="smaug.customer.service.controller.designMode.bean.FactoryMethodTest" factory-method="getBean"/>
复制代码
启动类ide
System.out.println("factorymethod => " +applicationContext.getBean("factoryMethod"));
复制代码
结果post
factorymethod => smaug.customer.service.controller.designMode.bean.HelloWorld@621624b1
复制代码
bean 的后置处理器,bean实例化后,咱们能够经过实现 BeanPostProcessor来对bean 作一些后置处理,大名鼎鼎的AOP 就是经过后置织入的方式实现的ui
BeanPostProcessor源码以下spa
public interface BeanPostProcessor {
/**
* bean 初始化前调用的方法
*/
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
/**
* bean 初始化后调用的方法
*/
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
}
复制代码
hello before smaug.customer.service.bean.Arequest@14b8a751
hello after smaug.customer.service.bean.Arequest@14b8a751
复制代码