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;}
}