Spring常用注解(16大常用注解详解)

Spring常用注解(16大常用注解详解)-mikechen

Spring框架提供了多种注解,用于简化配置和管理Spring应用程序的组件,下面详解Spring常用注解@mikechen

@Component

@Component 是一个通用的注解,用于将一个类标记为Spring容器管理的组件。

如下所示:

@Component
public class MyComponent {
    // Class implementation
}

这个注解通常用于自动扫描组件,将其纳入Spring容器的管理。

其他特定组件注解如 @Service, @Repository, @Controller 等都派生自 @Component

 

@Service

@Service 注解用于标记一个类为服务层的组件,它通常用于标识业务逻辑层的类,表示这些类提供业务服务。

如下所示:

@Service
public class MyService {
    // Service class implementation
}

通常与 @Autowired 注解一起用于自动注入服务层的Bean。

 

@Repository

@Repository 注解用于标记一个类为持久层的组件,它通常用于标识数据访问层的类,表示这些类负责与数据库或其他数据源进行交互。

如下所示:

@Repository
public class MyRepository {
    // Data access class implementation
}

 

@Controller

@Controller 注解用于标记一个类为控制器组件,它通常用于标识控制器类,表示这些类处理HTTP请求。

如下所示:

@Controller
public class MyController {
    @RequestMapping("/myendpoint")
    public String handleRequest() {
        // Request handling logic
        return "viewName";
    }
}

@Controller 通常用于Spring MVC中的控制器类。

 

@Autowired

@Autowired 用于实现自动装配,即将依赖的Bean自动注入到属性、构造函数或方法参数中,无需显式配置依赖关系。

如下所示:

@Component
public class MyService {
    private MyRepository repository;

    @Autowired
    public MyService(@Qualifier("myRepositoryImpl") MyRepository repository) {
        this.repository = repository;
    }
}

 

@Qualifier

@Qualifier 通常与 @Autowired 配合使用,用于解决多个类型相同的Bean的依赖注入问题。

如下所示:

@Component
public class MyService {
    private MyRepository repository;

    @Autowired
    public MyService(@Qualifier("myRepositoryImpl") MyRepository repository) {
        this.repository = repository;
    }
}

 

@Value

@Value 用于注入一个特定的值,如配置属性或常量,到Spring Bean中的字段、属性或方法参数。

如下所示:

@Component
public class MyConfig {
    @Value("${my.property}")
    private String myProperty;
}

 

@Configuration

@Configuration 用于标记一个类为配置类,通常与 @Bean 注解一起使用,用于定义Bean的创建和配置。

如下所示:

@Configuration
public class MyConfig {
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

 

@ComponentScan

@ComponentScan 用于启用组件扫描功能,自动扫描标记有 @Component 及其派生注解的类,并将它们注册为Spring Bean。

如下所示:

@Configuration
@ComponentScan("com.example")
public class MyConfig {
    // 自动扫描com.example包下的所有@Component类
}

 

@Scope

@Scope 用于定义Bean的作用域,如单例、原型、会话等。默认为单例。

如下所示:

@Component
@Scope("prototype")
public class MyPrototypeBean {
    // This bean has prototype scope
}

 

@Aspect

@Aspect 用于定义切面,结合其他AOP相关注解,如 @Before, @After, @Around,来实现切面编程。

如下所示:

@Aspect
@Component
public class MyAspect {
    @Before("execution(* com.example.service.*.*(..))")
    public void beforeServiceMethod() {
        // Advice code before a service method
    }
}

 

@Transactional

@Transactional 用于声明事务管理,通常应用于Service层的方法,以实现声明式事务。

如下所示:

@Service
public class MyService {
    @Transactional
    public void performTransaction() {
        // Transactional method
    }
}

 

@RequestMapping

@RequestMapping 用于定义控制器中的处理方法的映射路径,通常用于Spring MVC控制器。

如下所示:

@Controller
@RequestMapping("/mycontroller")
public class MyController {
    @RequestMapping("/myendpoint")
    public String handleRequest() {
        // Request handling logic
        return "viewName";
    }
}

 

@PathVariable

@PathVariable 用于从URL路径中获取变量值,通常用于RESTful风格的请求处理。

如下所示:

@Controller
@RequestMapping("/products")
public class ProductController {
    @GetMapping("/{productId}")
    public String getProductDetails(@PathVariable Long productId, Model model) {
        // 使用productId来加载特定产品的详情
        // ...
        return "product-details";
    }
}

 

@RequestParam

@RequestParam 用于从请求参数中获取变量值,通常用于处理HTTP请求中的参数。

如下所示:

@Controller
@RequestMapping("/products")
public class ProductController {
    @GetMapping("/search")
    public String searchProducts(@RequestParam("keyword") String keyword, Model model) {
        // 使用keyword来搜索产品
        // ...
        return "search-results";
    }
}

 

@ResponseBody

@ResponseBody 用于将方法的返回值直接作为HTTP响应体返回,通常用于RESTful服务。

如下所示:

@RestController
@RequestMapping("/api/products")
public class ProductApiController {
    @GetMapping("/{productId}")
    @ResponseBody
    public Product getProductDetails(@PathVariable Long productId) {
        // 返回产品信息作为JSON响应
        // ...
        return product;
    }
}

这些注解通常与Spring MVC一起使用,用于处理Web请求和构建RESTful API。

@PathVariable 用于从URL路径中提取变量值,@RequestParam 用于获取查询参数的值,而 @ResponseBody 用于将方法返回值作为HTTP响应的内容。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法