Spring旧新注解
1.Spring原始注解
1.1 概述
Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。
Spring原始注解主要是替代的配置
注意:
使用注解进行开发时,需要在applicationContext.xml中配置组件扫描
,作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法。
context-component-scan
<!--注解的组件扫描-->
<context:component-scan base-package="com.itheima"></context:component-scan>
2.注解用法
- 使用
@Compont
或@Repository
标识UserDaoImpl需要Spring进行实例化。
// @Component("userDao") //组件
@Repository("userDao") //使用@Repository表示dao层的类
public class UserDaoImpl implements UserDao {
public void update() {
System.out.println("update success...");
}
}
- 使用
@Compont
或@Service
标识UserServiceImpl需要Spring进行实例化- 使用
@Autowired
或者@Autowired+@Qulifier
或者@Resource
进行userDao的注入
// @Component("userService") //组件
@Service("userService") //使用@Service表示service层的类
public class UserServiceImpl implements UserService {
//@Autowired //自动注入,只有当容器中有一个userDaoa时才能使用
//@Qualifier("userDao") //注入id=userDao的bean
@Resource(name = "userDao") //@Autowired + @Qualifier("userDao")
private UserDao userDao;
public void modify() {
userDao.update();
}
}
- 使用
@Value
进行字符串的注入
常用来引入在properties文件中设置的值
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Value("注入普通数据")
private String str;
@Value("${jdbc.driver}")
private String driver;
@Override
public void save() {
System.out.println(str);
System.out.println(driver);
System.out.println("save running... ...");
}
}
- 使用
@Scope
标注Bean的范围
单例single
多例prototype
其他
//@Scope("prototype")
@Scope("singleton")
public class UserDaoImpl implements UserDao {
//此处省略代码
}
- 使用
@PostConstruct
标注初始化方法,使用@PreDestroy
标注销毁方法
@PostConstruct
public void init(){
System.out.println("初始化方法....");
}
@PreDestroypublic void destroy(){
System.out.println("销毁方法.....");
}
2.Spring新注解
使用上面的注解还不能全部替代xml配置文件,还需要使用注解替代的配置如下:
- 非自定义的Bean的配置:
< bean>
- 加载properties文件的配置:
<context:property-placeholder>
- 组件扫描的配置:
<context:component-scan>
- 引入其他文件:
<import>
@Configuration
标记当前类是Spring主配置类@ComponentScan
组件扫描/包扫描,在指定包及其子包下进行扫描@Import
导入其他Spring配置类,分模块开发
@Configuration
@ComponentScan("com.itheima")
@Import({DataSourceConfiguration.class})
public class SpringConfiguration {
...略
}
@PropertySource
引入properties文件@value
设置properties文件中的key-value
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfiguration {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
注解方法,用来将对象返回值放入容器
@Bean(name="dataSource")
public DataSource getDataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(driver);
dataSource.setJdbcUrl(url);
dataSource.setUser(username);
dataSource.setPassword(password);
return dataSource;
}
测试加载核心配置类创建Spring容器
@Testpublic void testAnnoConfiguration() throws Exception {
ApplicationContext applicationContext = new
AnnotationConfigApplicationContext(
SpringConfiguration.class);
UserService userService = (UserService)
applicationContext.getBean("userService");
userService.save();
DataSource dataSource = (DataSource)
applicationContext.getBean("dataSource");
Connection connection = dataSource.getConnection();
System.out.println(connection);
}