博客
关于我
Spring--通过注解来配置bean【转】
阅读量:443 次
发布时间:2019-03-06

本文共 3761 字,大约阅读时间需要 12 分钟。

Spring注解驱动的Bean配置与组件扫描指南

在Spring应用中,通过注解配置Bean是一种简洁高效的方式,能够自动发现和管理需要管理的组件。以下是关于Spring注解配置Bean的详细指南,包括组件扫描、自动注入以及相关配置示例。

1. 组件扫描(Component Scanning)

Spring能够从类路径中自动扫描,发现并实例化带有特定注解的组件。这种自动化扫描使开发者免去了手动配置的痛苦。以下是组件扫描的关键点:

  • @Component:这是Spring管理组件的基础注解,标识一个受Spring管理的组件。
  • @Repository:标识持久层组件,通常用于DAO层。
  • @Service:标识服务层(业务层)组件。
  • @Controller:标识表现层组件,通常用于Web层。

Spring默认的命名策略是:使用类的全名,首字母大写,除非在注解中指定了value属性来指定bean的名称。

要启用组件扫描,需要在Spring配置文件中添加如下配置:

  • base-package:指定需要扫描的基础包路径,Spring将扫描该包及其子包中的所有类。
  • resource-pattern:用于过滤特定的类,可以通过正则表达式指定。
  • include-filter:指定要包含的目标类。
  • exclude-filter:指定要排除的目标类。

2. 自动注入(Autowired)

@Autowired注解是Spring最常用的注入方式,支持通过类型、名称或自定义逻辑进行注入。以下是@Autowired的使用要点:

  • 类型注入:默认情况下,Spring通过类型进行注入。对于接口或非接口类型,Spring会查找唯一匹配的实现类。
  • 名称注入:可以通过@Qualifier注解指定特定的bean名称。
  • 数组注入:@Autowired可以注入数组类型的属性,Spring会自动匹配所有兼容类型的bean。
  • 集合注入:@Autowired可以注入集合属性,Spring会根据集合的类型自动装配所有兼容类型的bean。
  • Map注入:@Autowired可以注入Map属性。当Map的键值类型已知时,Spring会根据键值类型自动装配对应的bean。

3. @Resource和@Inject注解

除了@Autowired,Spring还支持@Resource和@Inject注解,这两种注解与@Autowired功能相似,但有一些细微差别:

  • @Resource:需要指定bean名称(如果不指定,默认使用字段或方法名)。与@Autowired不同,@Resource不支持required属性,默认所有属性都需要被注入。
  • @Inject:与@Autowired类似,但没有required属性,默认所有属性都需要被注入。@Inject不支持数组或集合注入。

建议优先使用@Autowired注解,因为它提供了更丰富的功能。

4. 代码示例

以下是一些典型的代码示例,展示了如何使用Spring注解配置Bean和组件扫描。

TestObject.java
package com.yl.annotation;import org.springframework.stereotype.Component;@Componentpublic class TestObject {}
UserRepository.java
package com.yl.annotation.repository;public interface UserRepository {    void save();}
UserRepositoryImpl.java
package com.yl.annotation.repository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import com.yl.annotation.TestObject;@Repository("userRepository")public class UserRepositoryImpl implements UserRepository {    @Autowired    private TestObject testObject;    @Override    public void save() {        System.out.println("UserRepository save...");        System.out.println(testObject);    }}
UserJdbcRepository.java
package com.yl.annotation.repository;import org.springframework.stereotype.Repository;@Repositorypublic class UserJdbcRepository implements UserRepository {    @Override    public void save() {        System.out.println("UserJdbcRepository save...");    }}
UserService.java
package com.yl.annotation.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.stereotype.Service;import com.yl.annotation.repository.UserRepository;@Servicepublic class UserService {    @Autowired    @Qualifier("userJdbcRepository")    private UserRepository userRepository;    public void add() {        System.out.println("UserService add...");        userRepository.save();    }}
UserController.java
package com.yl.annotation.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import com.yl.annotation.service.UserService;@Controllerpublic class UserController {    @Autowired    private UserService userService;    public void execute() {        System.out.println("UserController execute...");        userService.add();    }}
beans-annotation.xml

5. 自定义过滤

如果需要更复杂的过滤,可以使用自定义TypeFilter实现自定义的过滤逻辑。例如:

package com.yl.filter;import org.springframework.core.type.TypeFilter;public class MyCustomFilter extends TypeFilter {    public MyCustomFilter() {        super(MyCustomFilter.class);    }    @Override    protected boolean match( Class
type ) { return super.match(type) && isMyCondition(type); } private boolean isMyCondition(Class
type) { return type.getName().contains("Custom"); }}

在Spring配置中使用:

转载地址:http://llayz.baihongyu.com/

你可能感兴趣的文章
OpenCV(1)读写图像
查看>>
OpenCV:不规则形状区域中每种颜色的像素数?
查看>>
OpenCV:概念、历史、应用场景示例、核心模块、安装配置
查看>>
OpenDaylight融合OpenStack架构分析
查看>>
OpenERP ORM 对象方法列表
查看>>
openEuler Summit 2022 成功举行,开启全场景创新新时代
查看>>
openEuler 正式开放:推动计算多样化时代的到来
查看>>
OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_openeuler切换root用户_su:拒绝权限_passwd: 鉴定令牌操作错误---国产瀚高数据库工作笔记001
查看>>
OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_踩坑_安装以后系统无法联网_启动ens33网卡---国产瀚高数据库工作笔记002
查看>>
OpenFeign 入门与实战
查看>>
OpenFeign源码学习
查看>>
OpenFeign的使用方式成功解锁
查看>>
OpenFeign组件声明式服务调用
查看>>
openfeign远程调用不起作用解决_使用Spring Boot的spring.factories进行注入---SpringCloud Alibaba_若依微服务框架改造---工作笔记007
查看>>
openfire开发(四)消息拦截器
查看>>
openfire源码解读之将cache和session对象移入redis以提升性能
查看>>
Openfire身份认证绕过漏洞复现+利用(CVE-2023-32315)
查看>>
OpenForest 开源项目安装与使用指南
查看>>
OpenGL glBlendFunc() 设置颜色混合 透明度叠加计算
查看>>
OpenGL 中“立即模式”是什么意思?
查看>>