Spring常用注解

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

创建对象的注解

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

@Component

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

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

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

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

    • Java配置方法

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

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

@Service

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

  • 用法:与@Component用法相同

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

    java 复制代码
    @Service("adminService")
    public class AdminServiceImpl implements AdminService {
    ...
    }

@Repository

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

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

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

@Controller

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

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

    java 复制代码
    @Controller
    public class UserController {
     ....
    }

注入对象的注解

@Autowired

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

java 复制代码
@Service("adminService")
public class AdminServiceImpl implements AdminService {
    @Autowired
    private AdminDao adminDao;
}

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

@Qualifier

  • @Qualifier用于与@Autowired一起使用,在存在多个类型相同的Bean时,即可提供@Qualifier来指定具体注入的Bean
java 复制代码
@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,并将其注入

    java 复制代码
    public class AdminServiceImpl implements AdminService {
        @Resource(name = "adminDao")
        private AdminDao adminDao;
    }

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

按属性注入

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

    java 复制代码
    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销毁之前调用此方法
    java 复制代码
    @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/>标签
java 复制代码
@Configuration
@ComponentScan("com.mashang")
//@ComponentScan({"com.mashang"})配置多个路径的方法
public class SpringConfig {

}

@Import

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

}

@PropertySource@Value

@PropertySource

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

@Value

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

    java 复制代码
    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,若不指定默认为方法名
java 复制代码
@Bean
    public Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, accountName, password);
    }

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

相关推荐
小博测试成长之路13 天前
55分钟能用飞算JavaAI搭完JWT REST API吗?
springboot·ai编程·java开发·飞算javaai·ai coding·java代码生成
正在走向自律15 天前
飞算JavaAI能搞定充电站故障处置吗?
java·ai编程·java开发·飞算javaai·java代码生成·ai coding模型·springboo
云边有个稻草人15 天前
飞算JavaAI能处理SaaS套餐变更业务吗?
java·springboot·ai编程·java开发·飞算javaai·java代码生成·ai coding模型
todoitbo15 天前
飞算JavaAI的多租户权限隔离实测
java·springboot·ai编程·java开发·飞算javaai·java代码生成
欢喜躲在眉梢里2 个月前
用飞算Java做了一套新能源充电运营管理系统:把站点、设备、订单拆成可运营的微服务
java·开发语言·微服务·ai编程·技术分享·java开发·飞算javaai炫技赛
zzz海羊2 个月前
用飞算JavaAI完成一个超市商品进销系统:从生成工程到进销台账的实录测评
ai编程·技术分享·java开发·开发者工具·飞算javaai炫技赛·程序员日常
xcLeigh5 个月前
飞算 JavaAI 进阶实战:从代码生成到系统架构优化的全流程指南
java·系统架构·代码生成·java开发·飞算javaai炫技赛·javaai·飞算
xcLeigh5 个月前
JAVA项目实战:用飞算 JavaAI 高效开发电商系统核心功能模块
java·ai编程·电商系统·java开发·飞算javaai炫技赛
种时光的人5 个月前
Spring AI 工具调用(ToolCalling)完整使用教程
java·人工智能·后端·spring·ai·java开发·spring ai
xcLeigh5 个月前
飞算 JavaAI 智能突破:从效率工具到开发范式的革新
ai·系统架构·代码生成·java开发·飞算javaai炫技赛·飞算