person.properties
person.nickName=\u5C0F\u674E\u56DB
MainConfigOfPropertyValues
1. //使用@PropertySource读取外部配置文件中的k/v保存到运行的环境变量中;加载完外部的配置文件以后使用${}取出配置文件的值 2. @PropertySource(value={"classpath:/person.properties"}) 3. @Configuration 4. public class MainConfigOfPropertyValues { 5. 6. @Bean 7. public Person person(){ 8. return new Person(); 9. } 10. 11. }
IOCTest_PropertyValue
1. public class IOCTest_PropertyValue { 2. AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfPropertyValues.class); 3. @Test 4. public void test01(){ 5. printBeans(applicationContext); 6. System.out.println("============="); 7. 8. Person person = (Person) applicationContext.getBean("person"); 9. System.out.println(person); 10. 11. 12. ConfigurableEnvironment environment = applicationContext.getEnvironment(); 13. String property = environment.getProperty("person.nickName"); 14. System.out.println(property); 15. applicationContext.close(); 16. } 17. 18. private void printBeans(AnnotationConfigApplicationContext applicationContext){ 19. String[] definitionNames = applicationContext.getBeanDefinitionNames(); 20. for (String name : definitionNames) { 21. System.out.println(name); 22. } 23. } 24. 25. }
输出
mainConfigOfPropertyValues
person
=============
Person [name=张三, age=18, nickName=小李四]
小李四
自动装配
@Autowired-@Qualifier-@Primary-@Resource-@Inject
1. @Controller 2. public class BookController { 3. 4. @Autowired 5. private BookService bookService; 6. 7. } 8. @Service 9. public class BookService { 10. 11. //@Qualifier("bookDao") 12. //@Autowired(required=false) 13. //@Resource(name="bookDao2") 14. @Inject 15. private BookDao bookDao; 16. 17. public void print(){ 18. System.out.println(bookDao); 19. } 20. 21. @Override 22. public String toString() { 23. return "BookService [bookDao=" + bookDao + "]"; 24. } 25. 26. 27. } 28. //名字默认是类名首字母小写 29. @Repository 30. public class BookDao { 31. 32. private String lable = "1"; 33. 34. public String getLable() { 35. return lable; 36. } 37. 38. public void setLable(String lable) { 39. this.lable = lable; 40. } 41. 42. @Override 43. public String toString() { 44. return "BookDao [lable=" + lable + "]"; 45. } 46. 47. 48. 49. }
MainConifgOfAutowired
/** * 自动装配; * Spring利用依赖注入(DI),完成对IOC容器中中各个组件的依赖关系赋值; * * 1)、@Autowired:自动注入: * 1)、默认优先按照类型去容器中找对应的组件:applicationContext.getBean(BookDao.class);找到就赋值 * 2)、如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找 * applicationContext.getBean("bookDao") * 3)、@Qualifier("bookDao"):使用@Qualifier指定需要装配的组件的id,而不是使用属性名 * 4)、自动装配默认一定要将属性赋值好,没有就会报错; * 可以使用@Autowired(required=false); * 5)、@Primary:让Spring进行自动装配的时候,默认使用首选的bean; * 也可以继续使用@Qualifier指定需要装配的bean的名字 * BookService{ * @Autowired * BookDao bookDao; * } * * 2)、Spring还支持使用@Resource(JSR250)和@Inject(JSR330)[java规范的注解] * @Resource: * 可以和@Autowired一样实现自动装配功能;默认是按照组件名称进行装配的; * 没有能支持@Primary功能没有支持@Autowired(reqiured=false); * @Inject: * 需要导入javax.inject的包,和Autowired的功能一样。没有required=false的功能; * @Autowired:Spring定义的; @Resource、@Inject都是java规范 * * AutowiredAnnotationBeanPostProcessor:解析完成自动装配功能; * * 3)、 @Autowired:构造器,参数,方法,属性;都是从容器中获取参数组件的值 * 1)、[标注在方法位置]:@Bean+方法参数;参数从容器中获取;默认不写@Autowired效果是一样的;都能自动装配 * 2)、[标在构造器上]:如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置的组件还是可以自动从容器中获取 * 3)、放在参数位置: public Boss(@Autowired Car car){ this.car = car; System.out.println("Boss...有参构造器"); } * * 4)、自定义组件想要使用Spring容器底层的一些组件(ApplicationContext,BeanFactory,xxx); * 自定义组件实现xxxAware;在创建对象的时候,会调用接口规定的方法注入相关组件;Aware; * 把Spring底层一些组件注入到自定义的Bean中; * xxxAware:功能使用xxxProcessor; * ApplicationContextAware==》ApplicationContextAwareProcessor; * * * @author lfy * */ @Configuration @ComponentScan({"com.atguigu.service","com.atguigu.dao", "com.atguigu.controller","com.atguigu.bean"}) public class MainConifgOfAutowired { @Primary @Bean("bookDao2") public BookDao bookDao(){ BookDao bookDao = new BookDao(); bookDao.setLable("2"); return bookDao; } /** * @Bean标注的方法创建对象的时候,方法参数的值默认从容器中获取 * @param car * @return */ @Bean public Color color(Car car){ Color color = new Color(); color.setCar(car); return color; } }
IOCTest_Autowired
1. public class IOCTest_Autowired { 2. 3. @Test 4. public void test01(){ 5. AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConifgOfAutowired.class); 6. 7. BookService bookService = applicationContext.getBean(BookService.class); 8. System.out.println(bookService); 9. 10. //BookDao bean = applicationContext.getBean(BookDao.class); 11. //System.out.println(bean); 12. 13. Boss boss = applicationContext.getBean(Boss.class); 14. System.out.println(boss); 15. Car car = applicationContext.getBean(Car.class); 16. System.out.println(car); 17. 18. Color color = applicationContext.getBean(Color.class); 19. System.out.println(color); 20. System.out.println(applicationContext); 21. applicationContext.close(); 22. } 23. 24. }
@Profle
MainConfigOfProfile
1. /** 2. * Profile: 3. * Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能; 4. * 5. * 开发环境、测试环境、生产环境; 6. * 数据源:(/A)(/B)(/C); 7. * 8. * 9. * @Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件 10. * 11. * 1)、加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中。默认是default环境 12. * 2)、写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效 13. * 3)、没有标注环境标识的bean在,任何环境下都是加载的; 14. */ 15. 16. @PropertySource("classpath:/dbconfig.properties") 17. @Configuration 18. public class MainConfigOfProfile implements EmbeddedValueResolverAware{ 19. 20. @Value("${db.user}") 21. private String user; 22. 23. private StringValueResolver valueResolver; 24. 25. private String driverClass; 26. 27. 28. @Bean 29. public Yellow yellow(){ 30. return new Yellow(); 31. } 32. 33. @Profile("test") 34. @Bean("testDataSource") 35. public DataSource dataSourceTest(@Value("${db.password}")String pwd) throws Exception{ 36. ComboPooledDataSource dataSource = new ComboPooledDataSource(); 37. dataSource.setUser(user); 38. dataSource.setPassword(pwd); 39. dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test"); 40. dataSource.setDriverClass(driverClass); 41. return dataSource; 42. } 43. 44. 45. @Profile("dev") 46. @Bean("devDataSource") 47. public DataSource dataSourceDev(@Value("${db.password}")String pwd) throws Exception{ 48. ComboPooledDataSource dataSource = new ComboPooledDataSource(); 49. dataSource.setUser(user); 50. dataSource.setPassword(pwd); 51. dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/ssm_crud"); 52. dataSource.setDriverClass(driverClass); 53. return dataSource; 54. } 55. 56. @Profile("prod") 57. @Bean("prodDataSource") 58. public DataSource dataSourceProd(@Value("${db.password}")String pwd) throws Exception{ 59. ComboPooledDataSource dataSource = new ComboPooledDataSource(); 60. dataSource.setUser(user); 61. dataSource.setPassword(pwd); 62. dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/scw_0515"); 63. 64. dataSource.setDriverClass(driverClass); 65. return dataSource; 66. } 67. 68. @Override 69. public void setEmbeddedValueResolver(StringValueResolver resolver) { 70. // TODO Auto-generated method stub 71. this.valueResolver = resolver; 72. driverClass = valueResolver.resolveStringValue("${db.driverClass}"); 73. } 74. 75. }
dbconfig.properties
1. db.user=root 2. db.password=123456 3. db.driverClass=com.mysql.jdbc.Driver