关于spring:Spring基于注解开发

1次阅读

共计 2769 个字符,预计需要花费 7 分钟才能阅读完成。

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;}
}
正文完
 0