目录
@Component、@Repository、@Service、@Controller区别
@Autowired
@Autowired
注解的意思就是,当Spring发现@Autowired
注解时,将自动在代码上下文中找到与其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方去。
@Autowired用法详解:@Autowired用法详解 - Boblim - 博客园
Spring 注解配置(2)——@Autowired - Just_Do - 博客园 非常好值得阅读
@Component:
这将 java 类标记为 bean。它是任何 Spring 管理组件的通用构造型。spring 的组件扫描机制现在可以将其拾取并将其拉入应用程序环境中。
@Controller:
这将一个类标记为 Spring Web MVC 控制器。标有它的 Bean 会自动导入到 IoC 容器中。
@Service:
此注解是组件注解的特化。它不会对 @Component 注解提供任何其他行为。您可以在服务层类中使用 @Service 而不是 @Component,因为它以更好的方式指定了意图。
@Repository:
这个注解是具有类似用途和功能的 @Component 注解的特化。它为 DAO 提供了额外的好处。它将 DAO 导入 IoC 容器,并使未经检查的异常有资格转换为 Spring DataAccessException。
下面用案例来具体说明
UserRepository.java
package com.proc.bean.repository;
public interface UserRepository {
void save();
}
这里定义了一个UserRepository接口,其中定义了一个save方法
UserRepositoryImps.java
package com.proc.bean.repository;
import org.springframework.stereotype.Repository;
@Repository("userRepository")
public class UserRepositoryImps implements UserRepository{
@Override
public void save() {
System.out.println("UserRepositoryImps save");
}
}
定义一个UserRepository接口的实现类,并实现save方法,在这里指定了该bean在IoC中标识符名称为userRepository
UserService.java
package com.proc.bean.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.proc.bean.repository.UserRepository;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public void save(){
userRepository.save();
}
}
这里需要一个UserRepository类型的属性,通过@Autowired自动装配方式,从IoC容器中去查找到,并返回给该属性
applicationContext.xml配置
<context:component-scan base-package="com.proc.bean" />
测试代码:
1 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
2
3 UserService userService=(UserService) ctx.getBean("userService");
4 userService.save();
输出结果:UserRepositoryImps save