SpringBean 常用注解

 

目录:

1. Spring Bean 相关

1.1. @Autowired

1.2. Component,@Repository,@Service, @Controller

1.3. @RestController

1.4. @Scope

1.5. Configuration

 

 

1. Spring Bean 相关

1.1. @Autowired

自动导入对象到类中,被注入进的类同样要被 Spring 容器管理比如:Service 类注入到 Controller 类中。

@Service
public class UserService {
  ......
}

@RestController
@RequestMapping("/users")
public class UserController {
   @Autowired
   private UserService userService;
   ......
}

1.2. Component,@Repository,@Service, @Controller

我们一般使用 @Autowired 注解让 Spring 容器帮我们自动装配 bean。要想把类标识成可用于 @Autowired 注解自动装配的 bean 的类,可以采用以下注解实现:

@Component :通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。

@Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。

@Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。

@Controller : 对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。

 

1.3. @RestController

自动导入对象到类中,被注入进的类同样要被 Spring 容器管理比如:Service 类注入到 Controller 类中。

@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器 bean,并且是将函数的返回值直 接填入 HTTP 响应体中,是 REST 风格的控制器。

 

Guide 哥:现在都是前后端分离,说实话我已经很久没有用过@Controller。如果你的项目太老了的话,就当我没说。

 

单独使用 @Controller 不加 @ResponseBody的话一般使用在要返回一个视图的情况,这种情况属于比较传统的 Spring MVC 的应用,对应于前后端不分离的情况。@Controller +@ResponseBody 返回 JSON 或 XML 形式数据

1.4. @Scope

声明 Spring Bean 的作用域,使用方法:

四种常见的 Spring Bean 的作用域:

@Bean
@Scope("singleton")
public Person personSingleton() {
    return new Person();
}

singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。

prototype : 每次请求都会创建一个新的 bean 实例。

request : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。

session : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。

1.5. Configuration

一般用来声明配置类,可以使用 @Component注解替代,不过使用Configuration注解声明配置类更加语义化。

@Configuration
public class AppConfig {
    @Bean
    public TransferService transferService() {
        return new TransferServiceImpl();
    }

}

 

参考链接:

https://snailclimb.gitee.io/javaguide/#/./docs/system-design/framework/spring/spring-annotations

 

其他

autowired 和resource注解了解吗,Autowired是谁的(Spring的)

https://www.zhihu.com/question/39356740

(1)Autowired 注解是按类型装配依赖对象

         resource默认按照名字装配

(2)resource: JDK

         Autowired:Spring

 

@Component 和 @Bean 的区别是什么

(1)作用对象不同

(2)类路径扫描

(3)自定义更强

 

 https://segmentfault.com/a/1190000005626375

 

 

### Spring Framework 常用的用于装配 Bean注解 #### 使用 `@Component` 注解 `@Component` 是一个通用的 stereotype 注解,指示被标记的类是 Spring 应用上下文中的一类组件或 bean。当使用基于注解的容器配置以及自动检测机制时,这类类会被纳入到应用上下文中作为bean实例化和管理的一部分[^3]。 ```java @Component public class UsersServiceImpl implements UsersService { // Implementation details... } ``` #### 使用 `@Configuration` 和 `@Bean` 注解组合 `@Configuration` 表明该类主要用于定义其他 beans 或者说它本身就是一个配置类;而 `@Bean` 则用来指明方法会返回一个对象,并且应该注册为容器中的 bean 实例。这种方式允许开发者通过 Java 代码来显式地定义哪些对象应当成为 spring 容器内的托管对象[^2]。 ```java @Configuration public class AppConfig { @Bean public MyBean myBean() { return new MyBean(); } } public class MyBean { public MyBean(){ System.out.println("MyBean Initializing"); } } ``` #### 使用 `@Service`, `@Repository`, `@Controller` 特定层的注解 除了上述提到的基础注解外,为了更好地体现分层架构设计模式下的职责分离原则,在不同的业务逻辑层面还可以分别利用如下三个更为具体的注解: - **`@Service`**: 主要应用于服务层组件; - **`@Repository`**: 数据访问层(DAO 层)专用; - **`@Controller`**: 控制器层 (Web MVC Controller),负责处理 HTTP 请求并响应给客户端。 这些特定于某一层级上的注解本质上也是继承自 `@Component`,因此它们同样能够使目标类转变为可由 IoC 容器管理和注入对象。 #### 自动扫描包路径以发现带有元数据的组件 (`@ComponentScan`) 为了让应用程序能识别出那些已经被适当标注过的候选组件,通常还需要配合 `@ComponentScan` 来告诉 Spring 在哪个基础包及其子包下去寻找潜在的目标类。这一步骤对于启用自动装配功能至关重要[^4]。 ```java @Configuration @ComponentScan(basePackages = "com.example") public class ApplicationConfig {} ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值