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.jdbcurl=jdbc:mysql://localhost:3306/bank?serverTimezone=CSTuser=rootpassword=123456
- 3)如何让Spring帮咱们治理对象
@Service //告知Spring,UserService对象须要治理,也能够应用Componentpublic class UserService { }
- 4)管理机制问题(作用域、懒加载)
@Controller@Scope(value = "singleton") //告知Spring这个对象是单例的@Lazy //告知Spring开启懒加载public class UserController { }
- 5)主动拆卸
@Controller@Scope(value = "singleton")@Lazypublic 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; }}
- 对象实例化后以及被销毁后执行的办法
@Servicepublic 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; }}