當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
实例化Spring Bean:Bean实例化的姿势有多少种?
生活随笔
收集整理的這篇文章主要介紹了
实例化Spring Bean:Bean实例化的姿势有多少种?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<?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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 靜態方法實例化 Bean --><bean id="user-by-static-method" class="org.leon.spring.ioc.overview.domain.User"factory-method="createUser"/><!-- 實例(Bean)方法實例化 Bean --><bean id="user-by-instance-method" factory-bean="userFactory" factory-method="createUser"/><!-- FactoryBean實例化 Bean --><bean id="user-by-factory-bean" class="org.leon.spring.bean.factory.UserFactoryBean" /><bean id="userFactory" class="org.leon.spring.bean.factory.DefaultUserFactory"/>
</beans>
/*** 用戶類*/
public class User implements BeanNameAware {private Long id;private String name;private City city;private City[] workCities;private List<City> lifeCities;private Resource configFileLocation;private Company company;private Properties context;private String contextAsText;/*** 當前 Bean 的名稱*/private transient String beanName;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public City getCity() {return city;}public void setCity(City city) {this.city = city;}public Resource getConfigFileLocation() {return configFileLocation;}public void setConfigFileLocation(Resource configFileLocation) {this.configFileLocation = configFileLocation;}public City[] getWorkCities() {return workCities;}public void setWorkCities(City[] workCities) {this.workCities = workCities;}public List<City> getLifeCities() {return lifeCities;}public void setLifeCities(List<City> lifeCities) {this.lifeCities = lifeCities;}public Company getCompany() {return company;}public void setCompany(Company company) {this.company = company;}public static User createUser() {User user = new User();user.setId(1L);user.setName("小馬哥");return user;}@PostConstructpublic void init() {System.out.println("User Bean [" + beanName + "] 初始化...");}@PreDestroypublic void destroy() {System.out.println("User Bean [" + beanName + "] 銷毀中...");}@Overridepublic void setBeanName(String name) {this.beanName = name;}public Properties getContext() {return context;}public void setContext(Properties context) {this.context = context;}public String getContextAsText() {return contextAsText;}public void setContextAsText(String contextAsText) {this.contextAsText = contextAsText;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", city=" + city +", workCities=" + Arrays.toString(workCities) +", lifeCities=" + lifeCities +", configFileLocation=" + configFileLocation +", company=" + company +", context=" + context +", contextAsText='" + contextAsText + '\'' +", beanName='" + beanName + '\'' +'}';}
}
/*** Bean 實例化示例*/
public class BeanInstantiationDemo {public static void main(String[] args) {// 配置 XML 配置文件// 啟動 Spring 應用上下文BeanFactory beanFactory = new ClassPathXmlApplicationContext("classpath:/META-INF/bean-instantiation-context.xml");User user = beanFactory.getBean("user-by-static-method", User.class);User userByInstanceMethod = beanFactory.getBean("user-by-instance-method", User.class);User userByFactoryBean = beanFactory.getBean("user-by-factory-bean", User.class);System.out.println(user);System.out.println(userByInstanceMethod);System.out.println(userByFactoryBean);System.out.println(user == userByInstanceMethod);System.out.println(user == userByFactoryBean);}
}
/*** {@link User} 工廠類*/
public interface UserFactory {default User createUser() {return User.createUser();}
}
/*** 默認 {@link UserFactory} 實現*/
public class DefaultUserFactory implements UserFactory, InitializingBean, DisposableBean {// 1. 基于 @PostConstruct 注解@PostConstructpublic void init() {System.out.println("@PostConstruct : UserFactory 初始化中...");}public void initUserFactory() {System.out.println("自定義初始化方法 initUserFactory() : UserFactory 初始化中...");}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("InitializingBean#afterPropertiesSet() : UserFactory 初始化中...");}@PreDestroypublic void preDestroy() {System.out.println("@PreDestroy : UserFactory 銷毀中...");}@Overridepublic void destroy() throws Exception {System.out.println("DisposableBean#destroy() : UserFactory 銷毀中...");}public void doDestroy() {System.out.println("自定義銷毀方法 doDestroy() : UserFactory 銷毀中...");}@Overridepublic void finalize() throws Throwable {System.out.println("當前 DefaultUserFactory 對象正在被垃圾回收...");}
}
/*** {@link User} Bean 的 {@link org.springframework.beans.factory.FactoryBean} 實現*/
public class UserFactoryBean implements FactoryBean {@Overridepublic Object getObject() throws Exception {return User.createUser();}@Overridepublic Class<?> getObjectType() {return User.class;}
}
/*** 特殊的 Bean 實例化示例*/
public class SpecialBeanInstantiationDemo {public static void main(String[] args) {// 配置 XML 配置文件// 啟動 Spring 應用上下文ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:/META-INF/special-bean-instantiation-context.xml");// 通過 ApplicationContext 獲取 AutowireCapableBeanFactoryAutowireCapableBeanFactory beanFactory = applicationContext.getAutowireCapableBeanFactory();ServiceLoader<UserFactory> serviceLoader = beanFactory.getBean("userFactoryServiceLoader", ServiceLoader.class);displayServiceLoader(serviceLoader);// demoServiceLoader();// 創建 UserFactory 對象,通過 AutowireCapableBeanFactoryUserFactory userFactory = beanFactory.createBean(DefaultUserFactory.class);System.out.println(userFactory.createUser());}public static void demoServiceLoader() {ServiceLoader<UserFactory> serviceLoader = load(UserFactory.class, Thread.currentThread().getContextClassLoader());displayServiceLoader(serviceLoader);}private static void displayServiceLoader(ServiceLoader<UserFactory> serviceLoader) {Iterator<UserFactory> iterator = serviceLoader.iterator();while (iterator.hasNext()) {UserFactory userFactory = iterator.next();System.out.println(userFactory.createUser());}}
}
<?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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userFactoryServiceLoader" class="org.springframework.beans.factory.serviceloader.ServiceLoaderFactoryBean"><property name="serviceType" value="org.leon.spring.bean.factory.UserFactory" /></bean>
</beans>
?
總結
以上是生活随笔為你收集整理的实例化Spring Bean:Bean实例化的姿势有多少种?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何将BeanDefinition注册到
- 下一篇: 初始化Spring Bean:Bean初