Spring常用注解先容

鼠扑  金牌会员 | 2025-1-25 19:00:08 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 918|帖子 918|积分 2754

在Spring中,有很多高效的注解,其简化了开辟并进步代码可读性,如许我们就不用再去spring.xml文件中写标签了非常方便
创建对象的注解

在Spring,有用于识别不同类型的Bean,使得Spring容器可以自动管理这些Bean的创建和生命周期
@Component


  • 作用:将一个类标记为Spring容器管理的Bean,Spring会自动扫描并创建该对象
  • 用法:在类上利用@Component注解,Spring会自动注册为一个Bean
    1. //默认将id名改为小写
    2. //可使用value属性修改
    3. //@Component(value = "a")
    4. //@Component("s")
    5. @Component
    6. public class Admin implements Serializable {
    7. ...
    8. }
    复制代码
  • 配置方法
    在配置类或XML配置文件中启用组件扫描(@ComponentScan或标签


    • Java配置方法
      1. @Configuration
      2. @ComponentScan(basePackages = "com.example")
      3. public class AppConfig {
      4. }
      复制代码
    • XML配置方法
      1.    
      2.     <context:component-scan base-package="com.mashang"></context:component-scan>
      复制代码

@Service


  • 作用Service是@Component的派生注解,主要用于业务层的类(ServiceImp),表示该类是一个服务组件,其更加见名知意,表明是服务层的Bean
  • 用法:与@Component用法雷同
  • 配置:与@Component雷同利用配置类或XML文件
    1. @Service("adminService")
    2. public class AdminServiceImpl implements AdminService {
    3. ...
    4. }
    复制代码
@Repository


  • 作用Repository是@Component的另一个派生注解,用于标记数据访问层(DAO)
  • 用法:与@Service一致,特别的是@Repository是针对持久化层的
    1. @Repository
    2. public class UserRepository {
    3.    ...
    4. }
    复制代码
  • 配置方法:在配置类中启用组件扫描,大概利用 XML 配置
@Controller


  • 作用Controlller是用于标记Spring MVC控制器类的注解.其表明该类是一个Web控制器.用于处理请求返回视图
  • 用法:与Spring MVC一起利用,用于处理HTTP请求
    1. @Controller
    2. public class UserController {
    3. ....
    4. }
    复制代码
注入对象的注解

@Autowired

@Autowired是最常用的注解,用于将Spring容器中的Bean自动注入到当前类中
  1. @Service("adminService")
  2. public class AdminServiceImpl implements AdminService {
  3.     @Autowired
  4.     private AdminDao adminDao;
  5. }
复制代码
在需要注入的字段上添加@Autowired即可
@Qualifier


  • @Qualifier用于与@Autowired一起利用,在存在多个类型雷同的Bean时,即可提供@Qualifier来指定具体注入的Bean
  1. @Repository
  2. public class ClassDao1 extends ClassDao{}
  3. @Repository
  4. public class ClassDao2 extends ClassDao{}
  5. @Autowired
  6. @Qualifier("classDao1")
  7. private ClassDao classDao;
  8. public void queryAll() {
  9.     dao.queryAll();
  10.     System.out.println(classDao);
  11. }
复制代码
@Resource

@Resource可以注入Bean,但通常是按照名称注入,其与@Autowired有相似之处,但在注入方式上有所不同
按名称注入


  • 这是@Resource的默认注入方式,其会查找容器中开释有名称与目标属性名雷同的Bean,并将其注入
    1. public class AdminServiceImpl implements AdminService {
    2.     @Resource(name = "adminDao")
    3.     private AdminDao adminDao;
    4. }
    复制代码
在这个例子中,@Resource(name = "adminDao") 会根据 adminDao 的名字注入对应的 AdminDao 实现类
按属性注入


  • 若没有指定name属性,@Resource会根据属性的类型自动注入,也就是说,如果@Resource,注解的目标与容器中某个类型匹配,其会自动注入该类型的Bean
    1. public class AdminServiceImpl implements AdminService {
    2.     @Resource
    3.     private AdminDao adminDao;
    4. }
    复制代码
    这个例子中,若容器中存在AdminDao类型的Bean,Spring会自动注入到adminDao属性中
@Resource和@Autowired的差异


  • @Autowired 默认按类型注入,可利用@Qualifier来指定特定Bean名称,解决滴哦共和Bean的问题
  • @Resource 默认按名称注入,如果为指定name,则按类型举行注入.
@PostConstruct和@PreDestroy

两个注解分别为再Bean初始之后和烧毁之前实行的方法


  • 用法:

    • @PostConstruct:当Bean再创建并且所有依靠注入完成之后,调用该方法
    • @PreDestroy:在Bean烧毁之前调用此方法
    1. @Componentpublic class UserService {    @PostConstruct    public void init() {   
    2.     <context:component-scan base-package="com.mashang"></context:component-scan>System.out.println("UserService is initialized");    }    @PreDestroy    public void destroy() {   
    3.     <context:component-scan base-package="com.mashang"></context:component-scan>System.out.println("UserService is destroyed");    }}
    复制代码
其他的配置注解

@Configuration与@ComponentScan


  • @Configuration的作用:利用这个注解标识的类表明,这个类是一个Spring的配置类,这种配置类相比于传统的利用XML文件配置文件来说,Spring配置类通常包罗Bean的界说,和配置Bean的方法并将其注册到Spring容器中
  • @ComponentScan的作用:用于指定在Spring初始化容器时应该扫描的包,并将包中的类注册为Bean.其作用雷同于XML文件中的标签
  1. @Configuration
  2. @ComponentScan("com.mashang")
  3. //@ComponentScan({"com.mashang"})配置多个路径的方法
  4. public class SpringConfig {
  5. }
复制代码
@Import


  • 作用:该注解可以用于将其他配置类引入到当前配置类中,相当于将另一个配置类的内容导入当前类,可以导入多个配置类
  1. @Configuration
  2. @ComponentScan("com.mashang")
  3. @Import({DruidConfig.class, Test01.class})
  4. public class SpringConfig {
  5. }
复制代码
@PropertySource 与@Value

@PropertySource


  • 作用PropertySource用于配置Spring要加载的.properties文件
  1. @Component
  2. @PropertySource("classpath:druid.properties")
  3. public class JDBCUtil {
  4. ...
  5. }
复制代码

  • classpath:用于接收改文件位于项目内的类路径
@Value


  • 作用:用于将配置文件中的值注入到Spring Bean字段,方法参数或构造函数中.通常与@PropertySource一起利用,通过${}语法引用.properties中的键值对
    1. Component
    2. @PropertySource("classpath:druid.properties")
    3. public class JDBCUtil {
    4.     @Value("${driverClassName}")
    5.     private String driver;
    6.     @Value("${url}")
    7.     private String url;
    8.     @Value("${accountName}")
    9.     private String accountName;
    10.     @Value("${password}")
    11.     private String password;
    12.   
    13. }
    复制代码
@Bean


  • 作用Bean注解是作用是一个方法上的,被标识的方法的返回值会被注册为Spring Bean,并放入到容器中.
  • 属性:name属性用于指定改Bean的id,若不指定默以为方法名
  1. @Bean    public Connection getConnection() throws SQLException {   
  2.     <context:component-scan base-package="com.mashang"></context:component-scan>return DriverManager.getConnection(url, accountName, password);    }
复制代码
@Bean 注解的方法 getConnection() 返回的 Connection 对象会被注册为 Spring 容器中的 Bean,你可以通过 ctx.getBean() 来获取它

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表