@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)
  )
 									
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

			
               
               
               
               
          
