在Spring中,有许多高效的注解,其简化了开发并提高代码可读性,这样我们就不用再去spring.xml文件中写标签了非常方便

创建对象的注解

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

@Component

  • 作用:将一个类标记为Spring容器管理的Bean,Spring会自动扫描并创建该对象

  • 用法:在类上使用@Component注解,Spring会自动注册为一个Bean

    //默认将id名改为小写
    //可使用value属性修改
    //@Component(value = "a")
    //@Component("s")
    @Component
    public class Admin implements Serializable {
    ...
    }
  • 配置方法

    在配置类或XML配置文件中启用组件扫描(@ComponentScan<context:componet-scan>标签

    • Java配置方法

      @Configuration
      @ComponentScan(basePackages = "com.example")
      public class AppConfig {
      }
    • XML配置方法

          <!--Spring会扫描base-package路径下的所有类-->
      <context:component-scan base-package="com.mashang"></context:component-scan>

@Service

  • 作用:@Service@Component的派生注解,主要用于业务层的类(ServiceImp),表示该类是一个服务组件,其更加见名知意,表明是服务层的Bean

  • 用法:与@Component用法相同

  • 配置:与@Component相同使用配置类或XML文件

    @Service("adminService")
    public class AdminServiceImpl implements AdminService {
    ...
    }

@Repository

  • 作用:@Repository是@Component的另一个派生注解,用于标记数据访问层(DAO)

  • 用法:与@Service一致,特别的是@Repository是针对持久化层的

    @Repository
    public class UserRepository {
    ...
    }
  • 配置方法:在配置类中启用组件扫描,或者使用 XML 配置

@Controller

  • 作用:@Controlller是用于标记Spring MVC控制器类的注解.其表明该类是一个Web控制器.用于处理请求返回视图

  • 用法:与Spring MVC一起使用,用于处理HTTP请求

    @Controller
    public class UserController {
    ....
    }

注入对象的注解

@Autowired

@Autowired是最常用的注解,用于将Spring容器中的Bean自动注入到当前类中

@Service("adminService")
public class AdminServiceImpl implements AdminService {
@Autowired
private AdminDao adminDao;
}

在需要注入的字段上添加@Autowired即可

@Qualifier

  • @Qualifier用于与@Autowired一起使用,在存在多个类型相同的Bean时,即可提供@Qualifier来指定具体注入的Bean
@Repository
public class ClassDao1 extends ClassDao{}
@Repository
public class ClassDao2 extends ClassDao{} @Autowired
@Qualifier("classDao1")
private ClassDao classDao; public void queryAll() {
dao.queryAll();
System.out.println(classDao);
}

@Resource

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

按名称注入

  • 这是@Resource的默认注入方式,其会查找容器中释放有名称与目标属性名相同的Bean,并将其注入

    public class AdminServiceImpl implements AdminService {
    @Resource(name = "adminDao")
    private AdminDao adminDao;
    }

在这个例子中,@Resource(name = "adminDao") 会根据 adminDao 的名字注入对应的 AdminDao 实现类

按属性注入

  • 若没有指定name属性,@Resource会根据属性的类型自动注入,也就是说,如果@Resource,注解的目标与容器中某个类型匹配,其会自动注入该类型的Bean

    public class AdminServiceImpl implements AdminService {
    @Resource
    private AdminDao adminDao;
    }

    这个例子中,若容器中存在AdminDao类型的Bean,Spring会自动注入到adminDao属性中

@Resource@Autowired的差异

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

@PostConstruct@PreDestroy

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

  • 用法:

    • @PostConstruct:当Bean再创建并且所有依赖注入完成之后,调用该方法
    • @PreDestroy:在Bean销毁之前调用此方法
    @Component
    public class UserService { @PostConstruct
    public void init() {
    System.out.println("UserService is initialized");
    } @PreDestroy
    public void destroy() {
    System.out.println("UserService is destroyed");
    }
    }

其他的配置注解

@Configuration@ComponentScan

  • @Configuration的作用:使用这个注解标识的类表明,这个类是一个Spring的配置类,这种配置类相比于传统的使用XML文件配置文件来说,Spring配置类通常包括Bean的定义,和配置Bean的方法并将其注册到Spring容器中
  • @ComponentScan的作用:用于指定在Spring初始化容器时应该扫描的包,并将包中的类注册为Bean.其作用类似于XML文件中的<context:component-scan/>标签
@Configuration
@ComponentScan("com.mashang")
//@ComponentScan({"com.mashang"})配置多个路径的方法
public class SpringConfig { }

@Import

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

@PropertySource@Value

@PropertySource

  • 作用:@PropertySource用于配置Spring要加载的.properties文件
@Component
@PropertySource("classpath:druid.properties")
public class JDBCUtil {
...
}
  • classpath:用于接收改文件位于项目内的类路径

@Value

  • 作用:用于将配置文件中的值注入到Spring Bean字段,方法参数或构造函数中.通常与@PropertySource一起使用,通过${}语法引用.properties中的键值对

    Component
    @PropertySource("classpath:druid.properties")
    public class JDBCUtil {
    @Value("${driverClassName}")
    private String driver; @Value("${url}")
    private String url; @Value("${accountName}")
    private String accountName; @Value("${password}")
    private String password; }

@Bean

  • 作用:@Bean注解是作用是一个方法上的,被标识的方法的返回值会被注册为Spring Bean,并放入到容器中.
  • 属性:name属性用于指定改Bean的id,若不指定默认为方法名
@Bean
public Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, accountName, password);
}

@Bean 注解的方法 getConnection() 返回的 Connection 对象会被注册为 Spring 容器中的 Bean,你可以通过 ctx.getBean() 来获取它

Spring常用注解介绍的更多相关文章

  1. Spring常用注解介绍【经典总结】

    Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式. Spring注解方式减少了配置文件内容 ...

  2. SpringBoot+Spring常用注解总结

    为什么要写这篇文章? 最近看到网上有一篇关于 SpringBoot 常用注解的文章被转载的比较多,我看了文章内容之后属实觉得质量有点低,并且有点会误导没有太多实际使用经验的人(这些人又占据了大多数). ...

  3. [刘阳Java]_Spring常用注解介绍_第6讲

    Spring的注解是在Spring2.5的版本中引入的,目的简化XML配置.在企业开发过程中使用注解的频率非常高,但是学习注解的前提是大家一定要对Spring基于XML配置要熟悉,这是我个人建议,因为 ...

  4. Spring系列之Spring常用注解总结

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...

  5. Spring常用注解总结

    转载自:https://www.cnblogs.com/xiaoxi/p/5935009.html 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点 ...

  6. Spring注解 系列之Spring常用注解总结

    参考:Spring系列之Spring常用注解总结 (1) Resource 默认是byName的方式进行bean配置,@AutoWired默认是按照byType的方式进行装配bean的:(2)Comp ...

  7. Spring系列之Spring常用注解总结 转载

    Spring系列之Spring常用注解总结   传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.x ...

  8. spring常用注解笔记

    spring常用注解解释: 1. Mybatis的映射文件xxxMapper.xml中resultMap标签的作用 resultMap标签是为了映射select查询出来结果的集合,其主要 作用是将实体 ...

  9. SpringBoot | 第六章:常用注解介绍及简单使用

    前言 之前几个章节,大部分都是算介绍springboot的一些外围配置,比如日志配置等.这章节开始,开始总结一些关于springboot的综合开发的知识点.由于SpringBoot本身是基于Sprin ...

  10. SG-UAP常用注解介绍

    注解基本介绍 Annotation(注解)是JDK5.0及以后版本引入的.它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查.注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可 ...

随机推荐

  1. CommonsCollections2(基于ysoserial)

    环境准备 JDK1.8(8u421)这里ysoserial,我以本地的JDK8版本为准.commons-collections4(4.0 以ysoserial给的版本为准).javassist(3.1 ...

  2. QT6.8 编译 MSVC2022-64位MySQL驱动

    QT6.8没有编译MySql驱动,也没有.pro的项目文件,只能自己想办法编译,网上找了很多方法,终于找到了可以成功编译的方法,下面将我的编译过程详细记录如下: [声明:本文为原创,未经允许,不得转载 ...

  3. typescript 安装调试(二)

    一.安装ts-node 今天介绍另外一种更加方便的ts调试方式,需要安装以下几个库 第一个库是ts-node,这个库可以直接运行ts文件无需实时编译成js文件后再运行 安装命令  npm i ts-n ...

  4. js+jquery实现贪吃蛇经典小游戏

    项目只使用到了html,css,js,jquery技术点,没有使用游戏框架,下载本地直接双击index.html 运行即可体验游戏效果. 项目展示 进入游戏 游戏开始 游戏暂停 html文件 < ...

  5. Python打包工具之pyinstaller

    前言: 近期使用PySimpleGUI开发了一款开发者工具X-助手工具,意打造成平常开发助手,无论是图片还是网址的处理等等都需要这一个工具即可,无需在网上找各个网站去找解决方案, 对于GUI的打包工具 ...

  6. ZCMU-1129

    数学公式题罢了 学长 1.斯特灵公式: 2.对数公式(因为以10为底,得到的是10^x,所以最后向下取整加上1): #include<cstdio> #include<cmath&g ...

  7. ShellProgressBar控制台中漂亮的显示进度条

    ShellProgressBar控制台中漂亮的显示进度条 ShellProgressBar库的使用 控制台程序有时也需要进度条来显示任务执行的详细进度,最近就发现了一个第三方的类库叫ShellProg ...

  8. MeteoInfo-Java解析与绘图教程(二)

    MeteoInfo-Java解析与绘图教程(二) 上节说到了数据的简单解析,这节则说简单绘图 绘图的前置最重要的就是GridData,有了它,基本可以直接绘制出来 例如我们先放弃简单的自定义绘图的操作 ...

  9. AT_kupc2019_g ABCのG問題题解

    这题的难度不怎么好说,不过我认为还是挺简单的. 我们可以把答案看成由多个子图构成的图,这样我们只需要手打一个小子图,从中推出完整的答案. - 把小于子图范围的地方填上子图的字母 - 如果这个点的横坐标 ...

  10. Nginx+ModSecurity(WAF) 加强 Web 应用程序安全性

    Nginx 和 ModSecurity 加强 Web 应用程序的安全性 在当今互联网时代,Web 应用程序的安全性变得尤为重要.为了保护应用程序和用户的数据免受恶意攻击和漏洞利用,使用合适的工具和技术 ...