13-四种组件类型注解

13-使用注解方式实现Spring IoC

回到spring导航页

基于注解与Java Config配置IoC容器,使用注解或者Java Config与xml底层实现都是一样的

13-四种组件类型注解

基于注解的优势

  • 拜托繁琐的XML形式的bean 与依赖注入的配置
  • 注解是基于“声明式”的原则,更适合轻量级的现代企业应用
  • 利用注解可以让代码可读性变得更好,研发人员拥有更好的开发体验

spring 注解按功能划分

  1. 组件类型注解-声明当前类的功能与职责
  2. 自动装配注解-根据属性特征自动注入对象
  3. 元数据注解-更细化的辅助IoC容器管理对象的注解

四种组件类型注解

注解说明
@Component组件注解,通用注解,被该注解描述的类将被IoC容器管理并实例化
@Controller语义注解,说明当前类是MVC应用中的控制器类
@Service语义注解,说明当前类是Service业务服务类
@Repository语义注解,说明当前类用于业务持久层,通常描述对应的Dao类
  • 什么是业务持久层:就是负责与数据库实现增删改查的Dao类
  • controller: (在使用MVC模式的时候使用过)是承上启下的类,用于接收用户的输入,调用service的方法,以及向客户端返回结果
  • Component: 组件注解,在实际开发中,当遇到无法确认当前类是repository 还是 Sevice 还是 Controller时,它的边界是模糊的,这个时候就可以使用@Component,@Component组件注解是一个最统称的注解,当不清楚类的职责时,就使用@Component就可以了

开启组件扫描

只有开启了组件扫描,才能使用注解

<!--XML配置开启组件扫描,才能使用注解-->
<context:component-scan base-package="">
   <!--这里是排除,不需要扫描的包,可以使用正则表达式,只有类名匹配这个正则表达式,就会被排除在外-->
   <contex:exclude-filter type="regex" expression="com.torey.exl.*" />
</context:component-scan>

基于注解初始化IoC容器代码示例

新建一个maven项目,引入pom.xml文件

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.5</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
        </dependency>

在resources目录下新建applicationContext.xml文件,在如下官网
找到schema

schema

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>

</beans>

目录如下

package com.torey.spring.ioc.controller;

import org.springframework.stereotype.Controller;

/**
 * @Author http://torey611.gitee.io/li-tao-feng/
 * @Email torey6061@qq.com
 * @Date 2021/4/30 20:25
 * @描述:
 */
@Controller
public class UserController {

}
package com.torey.spring.ioc.dao;

import org.springframework.stereotype.Repository;

/**
 * @Author http://torey611.gitee.io/li-tao-feng/
 * @Email torey6061@qq.com
 * @Date 2021/4/30 20:06
 * @描述:
 */
//组件类型注解默认beanId为类名首字母小写,@Repository : beanId=userDao
//也可以指定beanId=@Repository("user"), beanId=user
@Repository
public class UserDao {

}

package com.torey.spring.ioc.service;

/**
 * @Author http://torey611.gitee.io/li-tao-feng/
 * @Email torey6061@qq.com
 * @Date 2021/4/30 20:22
 * @描述:
 */

import org.springframework.stereotype.Service;

@Service
public class UserService {
}

package com.torey.spring.ioc.util;

import org.springframework.stereotype.Component;

/**
 * @Author http://torey611.gitee.io/li-tao-feng/
 * @Email torey6061@qq.com
 * @Date 2021/4/30 20:27
 * @描述:
 */
@Component("stringUtils")
public class StringUtils {

}

applicationContext.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
    <!--在IoC容器初始化时自动扫描四种组件类型注解并完成实例化
    @Repository  @Service   @Controller  @Component
    -->
    <context:component-scan base-package="com.torey.spring.ioc.*"></context:component-scan>
</beans>
package com.torey.spring.ioc;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @Author http://torey611.gitee.io/li-tao-feng/
 * @Email torey6061@qq.com
 * @Date 2021/4/30 20:13
 * @描述:
 */
public class SpringApplication {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        String[] definitionNames = context.getBeanDefinitionNames();
        for (String definitionName : definitionNames) {
            System.out.println(definitionName);
        }
    }
}

输出打印如下:

userController
userDao
userService
stringUtilsAAA
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory

导航,上一页,下一页

12自己实现一个极简的IoC容器

14自动装配与Autowired

支持我-微信扫一扫-加入微信公众号

Aseven公众号

赞赏作者

赞赏作者
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值