@Component注解简介
下文笔者讲述`@Component` 注解简介,如下所示
`@Component`注解简介
`@Component`是Spring框架中的一个核心注解 用于将一个类标识为Spring管理组件(Bean) 通过使用`@Component`注解 Spring容器会在启动时自动检测并实例化这些类, 并将它们纳入Spring管理范围
`@Component`注解基本功能
-自动检测:
Spring 通过组件扫描(Component Scanning)
自动检测带有 `@Component` 注解的类,
并将其注册为 Spring 容器中的 Bean。
-依赖注入:
Spring 管理Bean可以通过依赖注入(Dependency Injection)相互协作
简化对象创建和管理。
-通用注解:
`@Component`是一个通用注解
适用于任何类型的组件
Spring还提供其他更具体的注解
如:
`@Service`、`@Repository` 和 `@Controller`
这些注解本质上都是`@Component`特化形式
`@Component`注解示例
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
public void doSomething() {
System.out.println("Doing something in MyComponent");
}
}
配置 Spring 应用上下文
为了使 Spring 能够扫描并注册 `@Component` 注解的类
需要配置组件扫描。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 启用组件扫描 -->
<context:component-scan base-package="com.example" />
</beans>
使用 Java 配置
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}
在 Spring 容器中使用
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainApp {
public static void main(String[] args) {
// 创建 Spring 应用上下文
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// 获取 MyComponent 实例
MyComponent myComponent = context.getBean(MyComponent.class);
// 调用方法
myComponent.doSomething();
}
}
其他注解
import org.springframework.stereotype.Service;
@Service
public class MyService {
public void performService() {
System.out.println("Performing service in MyService");
}
}
`@Repository`
用于标识数据访问层组件(通常用于 DAO 层)。
import org.springframework.stereotype.Repository;
@Repository
public class MyRepository {
public void saveData() {
System.out.println("Saving data in MyRepository");
}
}
- `@Controller`:
用于标识控制器组件(通常用于 MVC 架构中的控制器
import org.springframework.stereotype.Controller;
@Controller
public class MyController {
public void handleRequest() {
System.out.println("Handling request in MyController");
}
}
- `@RestController`:
用于标识 RESTful 控制器组件
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyRestController {
public String getResponse() {
return "Response from MyRestController";
}
}
4. 自定义组件扫描
可以通过 `@ComponentScan` 注解的
属性来定制组件扫描的行为
- `basePackages`:指定要扫描的包
@ComponentScan(basePackages = "com.example")
- `basePackageClasses`:
指定要扫描的类所在的包
@ComponentScan(basePackageClasses = MyComponent.class)
`includeFilters` 和 `excludeFilters`**:用于包含或排除特定的组件。
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Component;
@ComponentScan(
basePackages = "com.example",
includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Component.class),
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Configuration.class)
)
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


