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