Spring @Controller、@Component和@Autowired等几个最常见的注解

       在如今Spring Boot和Spring Cloud风生水起,Spring注解开发已成为主流开发模式,本篇将介绍常用的组件注册方式。我们所说的组件注册其实就是Spring 把合适的java类全部注册成spring Bean并把这些 Bean 对象交给 IOC 容器管理。  

注册组件常用注解

       常用的两个方式——组件注册注解(@Controller、@Service、@Repository 和@Component) + 包扫描注解(@ComponentScan)

  1. @Controller:一般用于控制器,即控制层组件;
  2. @Service:标识服务层(业务层)组件;
  3. @Repository:标识数据访问(持久)层组件;
  4. @Component:基本注解,标识了一个受Spring管理的组件,适用于所有层的组件。

       @ComponentScan:根据自定义的规则,自动扫描 IOC 容器中所有组件。

 

        注解@ComponentScan:根据自定义的规则,默认会自动装配标识了@Controller,@Service,@Repository,@Component等注解的类到Spring容器中。

 

        这几个注解主要用于标注Spring要进行实例化的类,一旦在某个类的上面标注了这样的注解,如果是单例模式的话,那么Spring在初始化的时候,就会将这些类实例化,而对于非单例模式的类,不取决于Spring容器本身,往往是客户端进行请求的时候,进行创建实例(Spring创建的)。@Component可以代替@Repository、@Service、@Controller,因为这三个注解是被@Component标注的,当组件不好归类的时候,我们可以使用这个注解进行标注。 

       思考:Spring怎么知道哪些Java类应该当作bean类处理?

       答:使用配置文件或者注解的方式进行标识需要处理的java类,这些被标注的类被Spring识别为bean类。

装配组件常用注解

      @Resource:按照名称(name)进行注入。该注解属于jdk中的注解,但是在项目中使用比较广泛。

      @Autowired:按照类型匹配自动注入。

      @Inject:和@Autowired注解一样也是按类型注入bean,但是没有required属性。

      以上三个注解主要用于为类中属性注入值,它们可以将(上面四个组件标注注解标注的类在Spring中实例化后的对象)装配到某些类的属性中。

Spring注解实战

       例如,使用@Repository注册UserDao的组件到Spring容器:

@Repository
public interface UserDao {
    User getUserById(Long userId);
}

      使用@Autowired把组件UserDao装配到UserServiceImpl实现类中:

复制代码
@Service
public class UserServiceImpl implements UserService {
    private static Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);

    @Autowired
    private UserDao userDao;
    @Override
    public User getUserById(Long userId) {
        logger.info("--------*****-----------");
        return userDao.getUserById(userId);
    }
}
复制代码

      这里,@Service将UserServiceImpl注册成组件托管给Spring容器。

结束语

      由于本文只是综述性质的文章,这里就不展开讨论了。如有不当之处,请留言讨论。

 

posted @   楼兰胡杨  阅读(849)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示