1、使用注解注入外部值:
@Component
@PropertySource(value = {"classpath:spring-value.properties"})
public class AceMQProducer {
public static final Logger LOGGER= LoggerFactory.getLogger(AceMQProducer.class);
private DefaultMQProducer producer;
@Value("${groupName}")
private String groupName;
@Value("${namesrvAddr}")
private String namesrvAddr;
}
spring-value.properties:
groupName=AceProducerGroup
namesrvAddr=192.168.0.15:9876
2、在做Spring的UnitTest时,如果不使用SpringBoot:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring.xml")
public class ProducerTest {
@Autowired
private AceMQProducer aceMQProducer;
@Test
public void testProducer() throws AceMQException{}
}
spring.xml:
<?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">
<context:component-scan base-package="com.hxm.trade.common"/>
</beans>
切记加上<context:component-scan base-package="com.hxm.trade.common"/>,需要实例化的类要添加注解@Component。
如果使用SpringBoot,测试时就直接:
@RunWith(SpringRunner.class)
@SpringBootTest
public class InitDatabaseTest {
@Autowired
UserDAO userDAO;
}
3、bean实例化时执行的方法,用配置文件实现:
<bean id="" class="" init-method="init"></bean>
用注解实现:在初始化时需要执行的方法上加注解@PostConstruct
spring中Constructor、@Autowired、@PostConstruct的顺序:Constructor >> @Autowired >> @PostConstruct
关于@PostConstruct:
https://www.jianshu.com/p/98cf7d8b9ec3
4、FactoryBean
https://blog.csdn.net/w_linux/article/details/80063062
5、同一个接口下不同实例的注入:
https://blog.csdn.net/u010476994/article/details/80986435