🚩 新的注解介绍
📌 @Configuration
- 介绍
从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件
配置类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。- 属性
value:用于指定配置类的字节码- 示例代码
@Configuration public class SpringConfiguration { //spring容器初始化时,会调用配置类的无参构造函数 public SpringConfiguration(){ System.out.println(“容器启动初始化。。。”); } }
📌 @Bean
- 介绍
@Bean标注在方法上(返回某个实例的方法),等价于spring配置文件中的<bean>
作用为:注册bean对象
主要用来配置非自定义的bean,比如DruidDataSource、SqlSessionFactory- 属性
name:给当前@Bean 注解方法创建的对象指定一个名称(即 bean 的 id)。
如果不指定,默认与标注的方法名相同
@Bean注解默认作用域为单例singleton作用域,可通过@Scope(“prototype”)设置为原型作用域;- 示例代码
@Configuration public class SpringConfiguration { //spring容器初始化时,会调用配置类的无参构造函数 public SpringConfiguration(){ System.out.println(“容器启动初始化。。。”); } @Bean @Scope(“prototype”) public StudentService studentService(){ return new StudentServiceImpl(1,“张三”); } }
📌 @ComponentScan
- 介绍
相当于context:component-scan标签
组件扫描器,扫描@Component、@Controller、@Service、@Repository注>解的类。
该注解是编写在类上面的,一般配合@Configuration注解一起使用。- 属性
basePackages:用于指定要扫描的包。
value:和basePackages作用一样。- 示例代码
Bean类(Service类):@Service public class StudentServiceImpl implements StudentService { @Override public void saveStudent() { System.out.println("保存学生Service实现"); } }
配置类:
@Configuration @ComponentScan(basePackages="com.o98k.spring.service") public class SpringConfiguration { public SpringConfiguration() { System.out.println("容器初始化..."); } }
📌 @PropertySource
- 介绍
加载properties配置文件
编写在类上面
相当于context:property-placeholder标签- 属性
value[]:用于指定properties文件路径,如果在类路径下,需要写上classpath- 示例代码
配置类:@Configuration @PropertySource(“classpath:jdbc.properties”) public class JdbcConfig { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; /** * 创建一个数据源,并存入 spring 容器中 * @return */ @Bean(name="dataSource") public DataSource createDataSource() { try { ComboPooledDataSource ds = new ComboPooledDataSource(); ds.setDriverClass(driver); ds.setJdbcUrl(url); ds.setUser(username); ds.setPassword(password); return ds; } catch (Exception e) { throw new RuntimeException(e); } } }
properties文件:
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql: ///spring jdbc.username=root jdbc.password=root
问题:
当系统中有多个配置类时怎么办呢?想一想之前使用XML配置的时候是如何解决该问题的。
🚩 通过注解获取容器
📌 Java应用(AnnotationConfigApplicationContext)
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class); StudentService service = context.getBean(StudentService.class); service.saveStudent();
📌 Web应用(AnnotationConfigWebApplicationContext)
<web-app> <context-param> <param-name>contextClass</param-name> <param-value> org.springframework.web.context. support.AnnotationConfigWebApplicationContext </param-value> </context-param> <context-param> <param-name>contextConfigLocation</param-name> <param-value> com.kkb.spring.test.SpringConfiguration </param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> </web-app>
⚡ 本文章非原创
⚡ 仅供参考学习
⚡ 内容来源于某视频网教学课件
网友评论