2

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

cing_self
18 声望3 粉丝