关于spring:Spring基于注解开发

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理