全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-18 8 分钟 ✍️ juanwangdev

注解配置

注解配置是Spring 2.5引入的配置方式,通过注解在代码中直接定义Bean和依赖关系。

Bean定义注解

@Component

通用组件注解,任何类都可使用。

Java
@Component
public class CommonComponent {
}

@Service

业务层组件,语义更明确。

Java
@Service
public class UserService {
    public void save(User user) {
        // 业务逻辑
    }
}

@Repository

数据访问层组件,支持异常转换。

Java
@Repository
public class UserRepository {
    public User findById(Long id) {
        // 数据访问
    }
}

@Controller

控制器层组件,用于Web应用。

Java
@Controller
public class UserController {
    @RequestMapping("/users")
    public String list() {
        return "userList";
    }
}

@RestController

RESTful控制器,相当于@Controller + @ResponseBody。

Java
@RestController
public class UserApiController {
    @GetMapping("/api/users")
    public List<User> list() {
        return userService.findAll();
    }
}

四种组件注解对比

注解层级作用
@Component通用通用组件
@ServiceService层业务服务
@RepositoryDAO层数据访问
@ControllerController层Web控制器

四种注解功能相同,只是语义区分,便于分层管理。

依赖注入注解

@Autowired

Java
@Service
public class OrderService {

    // 字段注入
    @Autowired
    private UserService userService;

    // 构造器注入(推荐)
    private final PaymentService paymentService;

    @Autowired
    public OrderService(PaymentService paymentService) {
        this.paymentService = paymentService;
    }

    // Setter注入
    @Autowired
    public void setNotificationService(NotificationService service) {
        this.notificationService = service;
    }
}

@Qualifier

Java
@Service
public class OrderService {

    @Autowired
    @Qualifier("primaryPaymentService")
    private PaymentService paymentService;
}

@Resource

Java
@Service
public class OrderService {

    @Resource
    private UserService userService;

    @Resource(name = "primaryService")
    private PaymentService paymentService;
}

配置类注解

@Configuration

Java
@Configuration
public class AppConfig {

    @Bean
    public UserService userService() {
        return new UserService();
    }
}

@ComponentScan

Java
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}

// 等价于XML: <context:component-scan base-package="com.example"/>

@EnableAspectJAutoProxy

Java
@Configuration
@EnableAspectJAutoProxy
public class AopConfig {
}

开启注解扫描

Java配置

Java
@Configuration
@ComponentScan("com.example")
public class AppConfig {
}

XML配置

XML
<context:component-scan base-package="com.example"/>

Spring Boot

Java
@SpringBootApplication // 已包含@ComponentScan
public class Application {
}

注解配置优缺点

优点缺点
代码简洁配置分散在代码中
类型安全修改需重新编译
IDE支持好不适合集中管理
符合现代习惯与代码耦合

常用注解一览

注解作用
@Component定义Bean
@Service业务层Bean
@Repository数据层Bean
@Controller控制层Bean
@Autowired依赖注入
@Qualifier指定Bean名称
@ResourceJSR-250注入
@Scope定义作用域
@Lazy懒加载
@Primary优先注入

要点总结

  1. @Component/@Service/@Repository/@Controller用于定义Bean
  2. 四种注解功能相同,只是语义区分
  3. @Autowired按类型注入,@Resource按名称注入
  4. @ComponentScan开启注解扫描
  5. Spring Boot默认扫描主类所在包及其子包

📝 发现内容有误?点击此处直接编辑

← 上一篇 XML配置
下一篇 → Bean的作用域
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库