一、Spring原始注解
Spring原始注解主要是替代<Bean>的配置
@Component 使用在类上用于实例化Bean
@Controller 使用在web层类上用于实例化Bean
@Service 使用在service层类上用于实例化Bean
@Repository 使用在dao层类上用于实例化Bean
@Autowired 使用在字段上用于根据类型依赖注入
@Qualifier 结合@Autowired一起使用用于根据名称进行依赖注入
@Resource 相当于@Autowired+@Qualifier,按照名称进行注入
@Value 注入普通属性
@Scope 标注Bean的作用范围
@PostConstruct 使用在方法上标注该方法是Bean的初始化方法
@PreDestroy 使用在方法上标注该方法是Bean的销毁方法
注意:
使用注解进行开发时,需要在applicationContext.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法。
<!--注解的组件扫描-->
<context:component-scan base-package="com.itheima"></context:component-scan>
注解的使用具体如下:
1、使用@Compont或@Repository标识UserDaoImpl需要Spring进行实例化。
@Repository ( "userDao" )
public class UserDaoImpl implements UserDao {
@Override
public void save ( ) {
System . out. println ( "save is running..." ) ;
}
}
使用@Compont或@Service标识UserServiceImpl需要Spring进行实例化
使用@Autowired或者@Autowired+@Qulifier或者@Resource进行userDao的注入
@Service ( "userService" )
public class UserServiceImpl implements UserService {
@Resource ( name = "userDao" )
private UserDao userDao;
public void setUserDao ( UserDao userDao) {
this . userDao = userDao;
}
@Override
public void save ( ) {
System . out. println ( driver) ;
userDao. save ( ) ;
}
} * /
}
3、使用@Value进行字符串的注入
@Service ( "userService" )
public class UserServiceImpl implements UserService {
@Value ( "${jdbc.driver}" )
private String driver;
@Value ( "字符串" )
private String driver;
@Resource ( name = "userDao" )
private UserDao userDao;
public void setUserDao ( UserDao userDao) {
this . userDao = userDao;
}
@Override
public void save ( ) {
System . out. println ( driver) ;
userDao. save ( ) ;
}
4、使用@Scope标注Bean的范围
@Service ( "userService" )
@Scope ( "singleton" )
public class UserServiceImpl implements UserService {
@Value ( "${jdbc.driver}" )
private String driver;
@Value ( "itcast" )
private String driver;
@Resource ( name = "userDao" )
private UserDao userDao;
public void setUserDao ( UserDao userDao) {
this . userDao = userDao;
}
@Override
public void save ( ) {
System . out. println ( driver) ;
userDao. save ( ) ;
}
}
5、使用@PostConstruct标注初始化方法,使用@PreDestroy标注销毁方法
@Service ( "userService" )
@Scope ( "singleton" )
public class UserServiceImpl implements UserService {
@Value ( "${jdbc.driver}" )
private String driver;
@Resource ( name = "userDao" )
private UserDao userDao;
public void setUserDao ( UserDao userDao) {
this . userDao = userDao;
}
@Override
public void save ( ) {
System . out. println ( driver) ;
userDao. save ( ) ;
}
@PostConstruct
public void init ( ) {
System . out. println ( "初始化方法。。。" ) ;
}
@PreDestroy
public void destory ( ) {
System . out. println ( "销毁方法" ) ;
}
}
二、Spring新注解
使用上面的原始注解还不能全部替代xml配置文件,还需要使用新注解替代的配置如下:
1、非自定义的Bean的配置:<bean>
2、加载properties文件的配置:<context:property-placeholder>
3、组件扫描的配置:<context:component-scan>
4、引入其他文件:<import>
@Configuration 用于指定当前类是一个Spring 配置类,当创建容器时会从该类上加载注解
@ComponentScan 用于指定Spring 在初始化容器时要扫描的包。作用和
在Spring 的xml 配置文件中的<context:component-scan base-package="包名"/>一样
@Bean 使用在方法上,标注将该方法的返回值存储到Spring 容器中
@PropertySource 用于加载.properties 文件中的配置
@Import 用于导入其他配置类
@PropertySource ( "classpath:jdbc1.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 ( "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容器:
public class TestDao {
@Test
public 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) ; }
}