7、Spring之基于注解管理bean

这篇具有很好参考价值的文章主要介绍了7、Spring之基于注解管理bean。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本质上:所有一切的操作都是Java代码来完成的,XML和注解只是告诉框架中的Java代码如何执行。

7.1、环境搭建

创建名为spring_ioc_annotation的新module,过程参考3.1节

7.1.1、创建spring配置文件

7、Spring之基于注解管理bean

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

</beans>

7.1.2、创建UserDao接口及实现类

7、Spring之基于注解管理bean

package org.rain.spring.dao;

/**
 * @author liaojy
 * @date 2023/8/5 - 18:32
 */
public interface UserDao {
}

7、Spring之基于注解管理bean

package org.rain.spring.dao.impl;

import org.rain.spring.dao.UserDao;

/**
 * @author liaojy
 * @date 2023/8/5 - 18:33
 */
public class UserDaoImpl implements UserDao {
}

7.1.3、创建UserService接口及实现类

7、Spring之基于注解管理bean

package org.rain.spring.service;

/**
 * @author liaojy
 * @date 2023/8/5 - 18:35
 */
public interface UserService {
}

7、Spring之基于注解管理bean

package org.rain.spring.service.impl;

import org.rain.spring.service.UserService;

/**
 * @author liaojy
 * @date 2023/8/5 - 18:36
 */
public class UserServiceImpl implements UserService {
}

7.1.4、创建UserController

7、Spring之基于注解管理bean

package org.rain.spring.controller;

/**
 * @author liaojy
 * @date 2023/8/5 - 18:38
 */
public class UserController {
}

7.2、注解和扫描

7.2.1、标识组件的常用注解

注解 含义
@Component 将类标识为普通组件
@Controller 将类标识为控制层组件
@Service 将类标识为业务层组件
@Repository 将类标识为持久层组件

@Controller、@Service、@Repository这三个注解只是在@Component注解的基础上起了三个新的名字

从Spring使用IOC容器管理bean组件的角度来看,这四个组件注解没有区别

@Controller、@Service、@Repository这三个注解只是为了让开发人员便于分辨组件的作用

7.2.2、使用组件注解

7.2.2.1、@Controller注解

7、Spring之基于注解管理bean

package org.rain.spring.controller;

import org.springframework.stereotype.Controller;

/**
 * @author liaojy
 * @date 2023/8/5 - 18:38
 */
@Controller
public class UserController {
}

7.2.2.2、@Service注解

7、Spring之基于注解管理bean

注意:组件注解只能用于实现类,不能用于接口;因为bean的class属性只能是实现类,不能是接口

package org.rain.spring.service.impl;

import org.rain.spring.service.UserService;
import org.springframework.stereotype.Service;

/**
 * @author liaojy
 * @date 2023/8/5 - 18:36
 */
@Service
public class UserServiceImpl implements UserService {
}

7.2.2.3、@Repository注解

7、Spring之基于注解管理bean

注意:组件注解只能用于实现类,不能用于接口;因为bean的class属性只能是实现类,不能是接口

package org.rain.spring.dao.impl;

import org.rain.spring.dao.UserDao;
import org.springframework.stereotype.Repository;

/**
 * @author liaojy
 * @date 2023/8/5 - 18:33
 */
@Repository
public class UserDaoImpl implements UserDao {
}

7.2.3、扫描组件注解

7、Spring之基于注解管理bean

注意:为了减少扫描的耗时,推荐尽可能精确地指定package

<?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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--
        对指定的package进行扫描,将使用组件注解的类的对象,交给spring的ioc容器来管理
    -->
    <context:component-scan base-package="org.rain.spring.controller"></context:component-scan>
    <context:component-scan base-package="org.rain.spring.service"></context:component-scan>
    <context:component-scan base-package="org.rain.spring.dao"></context:component-scan>

</beans>

7.2.4、测试

7、Spring之基于注解管理bean

package org.rain.spring.test;

import org.junit.Test;
import org.rain.spring.controller.UserController;
import org.rain.spring.dao.UserDao;
import org.rain.spring.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author liaojy
 * @date 2023/8/5 - 19:18
 */
public class IOCByAnnotationTest {

    @Test
    public void testAutowireByAnnotation(){

        ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-ioc-annotation.xml");
        UserController userController = ioc.getBean(UserController.class);
        System.out.println(userController);
        UserService userService = ioc.getBean(UserService.class);
        System.out.println(userService);
        UserDao userDao = ioc.getBean(UserDao.class);
        System.out.println(userDao);

    }
}

7.3、高级扫描

7.3.1、排除扫描指定组件

7.3.1.1、方式一:根据注解指定排除(常用)

7、Spring之基于注解管理bean

    <!--
        对指定的package进行扫描,将使用组件注解的类的对象,交给spring的ioc容器来管理
    -->
    <context:component-scan base-package="org.rain.spring">
        <!-- context:exclude-filter标签:指定排除规则 -->
        <!--
            type属性:设置排除的方式;
                type="annotation",根据注解排除,expression中设置要排除的注解的全类名
                type="assignable",根据类型排除,expression中设置要排除的类型的全类名
        -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

7.3.1.2、方式二:根据类型指定排除

7、Spring之基于注解管理bean

    <!--
        对指定的package进行扫描,将使用组件注解的类的对象,交给spring的ioc容器来管理
    -->
    <context:component-scan base-package="org.rain.spring">
        <!-- context:exclude-filter标签:指定排除规则 -->
        <!--
            type属性:设置排除的方式;
                type="annotation",根据注解排除,expression中设置要排除的注解的全类名
                type="assignable",根据类型排除,expression中设置要排除的类型的全类名
        -->
        <context:exclude-filter type="assignable" expression="org.rain.spring.controller.UserController"/>
    </context:component-scan>

7.3.2、仅扫描指定组件

7.3.2.1、方式一:根据注解指定包含(常用)

7、Spring之基于注解管理bean

    <!--
        对指定的package进行扫描,将使用组件注解的类的对象,交给spring的ioc容器来管理
    -->
    <!-- use-default-filters属性:取值false表示关闭默认扫描规则 -->
    <!-- 此时必须设置use-default-filters="false",因为默认规则即扫描指定包下所有类 -->
    <context:component-scan base-package="org.rain.spring" use-default-filters="false">
        <!-- context:include-filter标签:指定在原有扫描规则的基础上追加的规则 -->
        <!--
            type属性:设置追加的方式;
                type="annotation",根据注解追加,expression中设置要追加的注解的全类名
                type="assignable",根据类型追加,expression中设置要追加的类型的全类名
        -->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

7.3.2.2、方式二:根据类型指定包含

7、Spring之基于注解管理bean

    <!--
        对指定的package进行扫描,将使用组件注解的类的对象,交给spring的ioc容器来管理
    -->
    <!-- use-default-filters属性:取值false表示关闭默认扫描规则 -->
    <!-- 此时必须设置use-default-filters="false",因为默认规则即扫描指定包下所有类 -->
    <context:component-scan base-package="org.rain.spring" use-default-filters="false">
        <!-- context:include-filter标签:指定在原有扫描规则的基础上追加的规则 -->
        <!--
            type属性:设置追加的方式;
                type="annotation",根据注解追加,expression中设置要追加的注解的全类名
                type="assignable",根据类型追加,expression中设置要追加的类型的全类名
        -->
        <context:include-filter type="assignable" expression="org.rain.spring.controller.UserController"/>
    </context:component-scan>

7.4、注解组件的id

7.4.1、默认情况

通过注解+扫描所配置的bean的id,默认值为类的小驼峰;即UserController类对应的bean的id就是userController

7.4.2、自定义

可通过标识组件的注解的value属性设置自定义的bean的id

7、Spring之基于注解管理bean文章来源地址https://www.toymoban.com/news/detail-627138.html

到了这里,关于7、Spring之基于注解管理bean的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring IOC基于XML和注解管理Bean(一)

    Spring IOC基于XML和注解管理Bean(二) IoC 是 Inversion of Control 的简写,译为“ 控制反转 ”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出 松耦合 、更优良的程序。 Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,控

    2024年02月08日
    浏览(75)
  • Spring IOC基于XML和注解管理Bean(二)

    Spring IOC基于XML和注解管理Bean(一) 2.9、实验八:p命名空间 引入p命名空间 引入p命名空间后,可以通过以下方式为bean的各个属性赋值 2.10、实验九:引入外部属性文件 ①加入依赖 ②创建外部属性文件 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    2024年02月09日
    浏览(44)
  • Spring使用注解管理Bean

    引入lib包 Spring对Bean管理的常用注解 @Component组件(作用在类上) Spring中提供了@Component的三个衍生注解:(功能在目前为止是一致的) @Controller WEB层 @Service 业务层 @Repository 持久层 属性注入的注解:(使用注解注入的方式,可以不用提供set方法) @Value  用于注入普通类型 @Autowired  自动装

    2024年01月17日
    浏览(42)
  • 【spring(四)】Spring事务管理和@Transactional注解

    🌈键盘敲烂,年薪30万🌈 目录 Spring中的事务管理 问题抛出: 解决方案: @Transactional注解: rollbackFor属性: propagation属性: 应用: 📕总结 知识回顾: ❓什么是事务 事务是对数据操作的集合,它是数据操作的最小执行单位,也就是说,要么一个事务中操作全部执行完毕,

    2024年01月17日
    浏览(46)
  • 注解实现(基于Spring AOP)

    切入点表达式 Spring AOP 支持的切入点主要有以下几种: execution:用于匹配方法执行的连接点。这是最常用的切入点指示器。你可以指定具体的方法,或者类来匹配。 例如: execution(* com.example.service.*.*(..)) ,这个表达式表示匹配 com.example.service 包下的所有类的所有方法。 wit

    2024年02月16日
    浏览(41)
  • Spring如何使用自定义注解来实现自动管理事务?

    人可以做他(她)想做的,但不能要他(她)想要的 在两年半以前,我写了一篇博客:框架的灵魂之注解基础篇: 在那篇博客的结尾,我埋了一个坑: 如今,我练习时长达 两年半 ,终于摔锅归来! 本篇博客基于SpringBoot整合MyBatis-plus,如果有不懂这个的, 可以查看我的这篇博客

    2024年01月25日
    浏览(57)
  • Spring02-Spring注解的使用、基于注解的IOC、纯注解配置、整合Junit、AOP入门、基于配置文件的AOP、切入点表达式、基于配置的文件环绕通知

    学习基于注解的 IOC 配置,即注解配置 和 XML 配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。 关于实际的开发中到底使用xml还是注解,每家公司有着不同的使用习惯 , 所以这两种配置方式我们都需要掌握。 把 Spring 的 xml 配置内容改为使用

    2024年02月03日
    浏览(74)
  • Spring——基于注解的AOP配置

    1.1.pom.xml 1.2.dao 1.3.service 1.4.applicationContext.xml 1.5.测试 2.1.applicationContext.xml 2.2.AOP配置 常用注解 @Aspect:把当前类声明为切面类 @Before:前置通知,可以指定切入点表达式 @AfterReturning:后置【try】通知,可以指定切入点表达式 @AfterThrowing:异常【catch】通知,可以指定切入点表达

    2024年01月22日
    浏览(37)
  • Spring MVC 三 :基于注解配置

    Servlet3.0 Servlet3.0是基于注解配置的理论基础。 Servlet3.0引入了基于注解配置Servlet的规范,提出了可拔插的ServletContext初始化方式,引入了一个叫ServletContainerInitializer的接口。 An instance of the ServletContainerInitializer is looked up via the jar services API by the container at container / application sta

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包