Spring常用注解
@Component
- 作用:告知Spring帮我们管理这个对象
- 放置位置:类上
@Controller、@Service、@Repository
- 作用:与Component
- 放置位置:类上
- 这样写更能体现出分层架构的思想,@Controller注解用于管理控制层的对象,@Service注解用于管理model层中的service层的对象,@Repository用于管理model层中的dao层的对象
@Autowired
- 作用:自动装配
- 放置位置:属性上、构造方法上、set方法上
@Qualifier
- 作用:配合Autowired使用,用来指定具体注入的对像的唯一标识
@Resource(name="")
- 等同于Autowired和Qualifier的结合使用
- 它不是Spring框架的注解
@Scope
- 作用:声明对象的作用域,
- singleton
- prototype
- 放置位置:类上
@Lazy
- 作用:声明该对象是否启用懒加载机制
- 放置位置:类上
@Value()
- 作用:给属性注入值
- 放置位置:属性上
@PostConstruct
- 作用:当对象实例化之后,第一次执行的方法
@PreDestroy
- 作用:当对象被销毁后,第一次执行的方法
@Bean
- 作用:通过方法产生一个对象交给Spring去管理
- 放置位置:方法上面
@Configuration
- 作用:声明该类是Spring的核心配置类(等同于Spring的核心配置文件),
- 放置位置:类上面
@ComponentScan
- 作用:告知Spring哪些包是需要扫描的(扫描需要被Spring管理的对象)
- 放置位置:类上面
@PropertySource
- 作用:引入一个外部.properties文件
- 放置位置:类上面
@Import
- 作用:引入其他配置类
- 放置位置:类上面
注解的使用
1)如何用注解代替核心配置文件
- 自定义一个配置类
@Configuration
@ComponentScan(basePackages = {"com.cjh"})//告诉Spring要扫描包的位置
@Import(ConfigClass.class)//引入其他配置类
public class MainConfig {
}
- 2)如何引入properties文件以及动态的注入值
//classpath:+文件名,告知Spring文件名
@PropertySource("classpath:jdbc.properties")
public class ConfigClass {
//自动注入属性值,采用SPEL表达式,获取properties文件的配置信息
@Value("${driverClassName}")
private String driverClassName;
@Value("${url}")
private String url;
@Value("${user}")
private String username;
@Value("${password}")
private String password;
//通过@bean注解,告知spring以下两个方法是要生成对象的方法,并让spring管理
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource){
return new JdbcTemplate(dataSource);
}
@Bean
public DataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/bank?serverTimezone=CST");
dataSource.setUsername("root");
dataSource.setPassword("123456");
return dataSource;
}
}
jdbc.properties文件内容
driverClassName=com.mysql.cj.jdbc
url=jdbc:mysql://localhost:3306/bank?serverTimezone=CST
user=root
password=123456
- 3)如何让Spring帮我们管理对象
@Service //告知Spring,UserService对象需要管理,也可以使用Component
public class UserService {
}
- 4)管理机制问题(作用域、懒加载)
@Controller
@Scope(value = "singleton") //告知Spring这个对象是单例的
@Lazy //告知Spring开启懒加载
public class UserController {
}
- 5)自动装配
@Controller
@Scope(value = "singleton")
@Lazy
public class UserController {
//告知Spring这个属性需要自动装配
@Autowired
UserService userService;
public UserController(){
System.out.println("controller创建了");
}
public UserController(UserService userService){
this.userService = userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
- 对象实例化后以及被销毁后执行的方法
@Service
public class UserService {
private UserDao userDao;
public UserService(){
System.out.println("service创建了");
}
public UserService(UserDao dao){
this.userDao = dao;
}
//告知Spring,getMessage这个方法在userService对象实例化之后以及被销毁之后都要执行
@PostConstruct
@PreDestroy
public void getMessage(){
System.out.println("hhhh");
}
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public UserDao getUserDao() {
return userDao;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。