spring注解
1. 常用的注解
1.1 用于创建对象的(bean)
代替:<bean id="" class="">
- @Component
作用在类上面,默认类名首字母小写作为bean的唯一标识 - @Controller @Service @Repository
控制层、服务层、持久成注入,与@Component作用一样
1.2 用于给对象(bean)注入数据的
代替:<property name="" ref=""> <property name="" value="">
- @Autowired
作用在类属性(变量)上面,在容器中找到类型与类属性一样的,进行注入,如果存在多个类型相同的,就以属性名作为唯一标识注入,如果属性名无法匹配到bean的id,就报错。
@Autowired
private IUserDao dao;
//先在容器中找到IUserDao,或者实现类,子类也行,如果只存在一个类型
//相同的bean,那么就直接注入,如果存在多个类型相同的bean,就以dao
//作为bean的id(唯一标识)进行匹配,如果这样还匹配不到就报错
- @Qualifier
解决@Autowired的问题,如果存在多个类型相同的bean,而我们又不想改变属性的属性名,该如何注入。
@Autowired
@Qualifier(value = "userDao02")//指定要注入bean的id
private IUserDao dao;
- @Resource
直接按照bean的id进行注入
@Resource(name = "userDao02")
private IUserDao dao;
- @Value
注入基本数据类型和 String 类型数据的,使用spring的el表达式,获取值${表达式}。
1.3 用于改变对象(bean)作用范围的
代替:<bean id="" class="" scope="">
- @Scope
指定 bean 的作用范围。取值:singleton prototype request session globalsession
1.4 对象生命周期相关的
取代:<bean id="" class="" init-method="" destroy-method="" />
- @PostConstruct
作用在初始化方法上面 - @PreDestroy
作用在销毁方法上面
2. 取代配置文件的注解
使用配置类进行配置
- @Configuration
指定该类为配置类, - @ComponentScan
取代:<context:component-scan base-package=“com.itzpx”/>
指定需要扫描的包
@Configuration
@ComponentScan("com.itzpx")//扫描该包下面的spring注解
public class SpringConfiguration {
}
- @Bean
该注解只能写在方法上,表明使用此方法创建一个对象,并且放入 spring 容器。
name:给当前@Bean 注解方法创建的对象指定一个名称(即 bean 的 id)。
public class JdbcConfig {
/**
* 创建一个数据源,并存入 spring 容器中
* @return
*/
@Bean(name="dataSource")
public DataSource createDataSource() {
try {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setUser("root");
ds.setPassword("1234");
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql:///spring_day02");
return ds;
} catch (Exception e) {
throw new RuntimeException(e);
} }
/**
* 创建一个 DBAssit,并且也存入 spring 容器中
* @param dataSource
* @return
*/
@Bean(name="dbAssit")
public DBAssit createDBAssit(DataSource dataSource) {
return new DBAssit(dataSource);
} }
- @PropertySource
作用在配置类上面,用于加载.properties 文件中的配置。
value[]:用于指定 properties 文件位置。如果是在类路径下,需要写上 classpath:
当我们加载完配置文件后,就可以用el表达式,去取值
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
- @Import
用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration 注解。当然,写上也没问题
@Configuration
@ComponentScan(basePackages = "com.itheima.spring") @Import({ JdbcConfig.class})
public class SpringConfiguration { }
@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig{
}
3. spring整合junits的注解
取代:
private IUserService service;
@Before
public void init(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
service = ac.getBean("userServiceImpl", UserServiceImpl.class);
}
第一步:拷贝整合 junit 的必备 jar 包到 lib 目录
第二步:使用@RunWith 注解替换原有运行器
第三步:使用@ContextConfiguration 指定 spring 配置文件的位置
第四步:使用@Autowired 给测试类中的变量注入数据
结果:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"classpath:bean.xml"})
public class AccountServiceTest {
@Autowired
private IAccountService as ; }