12.Bean使用拾遗(二)

xiaoxiao2025-10-25  10

文章目录

12.Bean使用拾遗(二)1. Autowired/Resource/Inject2. Componet-scan3. DefaultListableBeanFactory动态添加Bean

12.Bean使用拾遗(二)

1. Autowired/Resource/Inject

@Autowired byType, 有required属性@Resource(Java Content depentment inject standard JSR-299) by name, 无required属性@Inject(Java Content depentment inject standard JSR-250) byType, 无required属性

2. Componet-scan

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" default-autowire="default"> <context:component-scan base-package="com.desmond.springlearning.component_scan"> <context:include-filter type="aspectj" expression="com.desmond.springlearning.component_scan..*Service+"/> <context:exclude-filter type="regex" expression="com.desmond.springlearning.component_scan.dao.*"/> </context:component-scan> </beans> package com.desmond.springlearning.component_scan.dao; import lombok.Data; /** * @author presleyli * @date 2018/10/25 上午8:05 */ @Data public class DemoDao { private String name; public DemoDao() { this.name = "dao"; } } package com.desmond.springlearning.component_scan.service; import lombok.Data; /** * @author presleyli * @date 2018/10/25 上午8:05 */ @Data public class Demo2Service { private String name; public Demo2Service() { this.name = "service"; } } package com.desmond.springlearning.component_scan.service; /** * @author presleyli * @date 2018/10/25 上午8:06 */ public class DemoService { } package com.desmond.springlearning.component_scan; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; /** * @author presleyli * @date 2018/10/24 下午9:22 */ public class Test { public static void main(String[] args) { Resource resource = new ClassPathResource("component_scan/application.xml"); XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(resource); System.out.println(xmlBeanFactory.containsBean("demoDao")); System.out.println(xmlBeanFactory.containsBean("demo2Service")); System.out.println(xmlBeanFactory.containsBean("demoService")); } } output: false true true

3. DefaultListableBeanFactory动态添加Bean

package com.desmond.springlearning.dynamica_bean; import lombok.Data; /** * @author presleyli * @date 2018/10/25 上午8:29 */ @Data public class UserDao { private String name; } package com.desmond.springlearning.dynamica_bean; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * @author presleyli * @date 2018/10/25 上午8:29 */ @Data @AllArgsConstructor @NoArgsConstructor public class UserService { private UserDao userDao; } package com.desmond.springlearning.dynamica_bean; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.DefaultListableBeanFactory; /** * @author presleyli * @date 2018/10/25 上午8:27 */ public class UserServiceFactory implements BeanFactoryPostProcessor { public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { DefaultListableBeanFactory factory = (DefaultListableBeanFactory) configurableListableBeanFactory; BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(UserService.class); beanDefinitionBuilder.addPropertyReference("userDao", "userDao"); // 已经存在的do factory.registerBeanDefinition("userService1", beanDefinitionBuilder.getRawBeanDefinition()); factory.registerSingleton("userService2", new UserService()); } } package com.desmond.springlearning.dynamica_bean; import com.desmond.springlearning.method_replace.Boss1; import com.desmond.springlearning.method_replace.Boss2; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.cglib.core.DebuggingClassWriter; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; /** * @author presleyli * @date 2018/10/24 下午9:22 */ public class Test { public static void main(String[] args) { ApplicationContext factory = new ClassPathXmlApplicationContext("listable/application.xml"); UserService userService1 = (UserService)factory.getBean("userService1"); UserService userService2 = (UserService)factory.getBean("userService2"); System.out.println(userService1); } } <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="default"> <bean id="userServiceFactory" class="com.desmond.springlearning.dynamica_bean.UserServiceFactory"/> <bean id="userDao" class="com.desmond.springlearning.dynamica_bean.UserDao" p:name="from xml"/> </beans>
转载请注明原文地址: https://www.6miu.com/read-5038484.html

最新回复(0)