Spring构造注入&注解注入&AOP

Lombok注解:构造器注入:@RequiredArgsConstructor 我是 ABin-阿斌:写一生代码,创一世佳话,筑一览芳华。 如果小伙伴们觉得我的文章不错,记得一键三连,感谢~ 文章目录前言一、为什么推荐使用:构造器注入方式二、Spring官方推荐1、构造器注入2、setter注入3、构造器注入和Setter注入的区别总结1、Autowired的多种方式二、参考文章: 前言 Spring 依赖注入方式主要有2种: 第一种是: 通过 @Autowire、@Resource 等注解注入 第二种是: 通过构造器的方式进行依赖注入,我们只要配合 Lombok 给的注解就. 阅读详情

一、依赖注入

1.导包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.itsource</groupId>
    <artifactId>spring-day2</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.2.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.8</version>
        </dependency>


        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
           <resource>
               <directory>src/test/java</directory>
               <includes>
                   <include>**/*.xml</include>
               </includes>
           </resource>
        </resources>
    </build>
</project>

2.构造参数注入

  • 方案一:根据构造器参数的顺序(索引)
!-- 按照索引注入,索引开始为0 -->
<bean id="MyBean" class="cn.itsource._01_.MyBean">
	<constructor-arg index="0" value="666" />
	<constructor-arg index="1" value="张二娃" />
</bean>
  • 方案二:根据构造器参数的名称
<!-- 按照名称注入,名称必须一致 -->
<bean id="MyBean" class="cn.itsource._01_.MyBean">
	<constructor-arg name="id" value="1" />
	<constructor-arg name="name" value="张三娃" />
</bean>
  • 方案三:根据构造器的类型注入
<!-- 按照类型注入,必须一一对应,不能有重复的类型-->
<bean id="MyBean" class="cn.itsource._01_.MyBean">
	<constructor-arg type="java.lang.Long" value="1" />
	<constructor-arg type="java.lang.String" value="张四娃" />
</bean>

3.数组

  • 简写
<property name="arrays" value="A,B,C" />
  • .完整写法
<property name="arrays">
	<array>
		<value>xxx</value>
		<value>yyy</value>
		<value>zzz</value>
	</array>
</property>

二、全注解配置

1.配置context命名空间

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

2.第一步:配置让Spring扫描类与支持注解

<!-- 
	@Component  普通仓库
	@Repository  仓库(其实就是dao层)
	@Service	service层
	@Controller  控制层(servlet、action)
 -->
<!-- 进行包的扫描,去看类上面是否有相应的标签配置 -->
<context:component-scan base-package="cn.itsource._03_anno" />
<!-- 这个不是必须的(spring3.2版本前使用) 配上后兼容性好 -->
<!-- 开启Spring的注解支持【默认就是开启的】 -->
<context:annotation-config />

3.第二步:在类里面加上注解

.Dao

@Repository
public class UserDao {
	public void save(){
		System.out.println("保存数据xxxx....");
	}
}

.Service

@Service
public class UserService {
	@Autowired
	private UserDao userDao;
	public void save(){
		userDao.save();
	}
}

.Action

/**
Spring 的Controller 实例化默认是单例.
每次请求 controller 就会只使用这一个对象.
*/
@Controller
@Scope(“prototype”)//使用Spring的@Scope("prototype")注解,让单例变成多例.
public class UserAction {
	@Autowired
	private UserService userService;
	public String save(){
		userService.save();
		return "success";
	}
}

4.注解配置bean的名称

  • 4.1.接口有两个实现(可能性比较少)
  • 成之后,大家注意,现在的配置还有一个问题,比如说我按真实情况来一个Dao接口,然后这个接口有两个实现,现在就会出问题
    IUserDao (UserJdbcDaoImpl/UserJpaDaoImpl)
    而我们声明的时候就是使用了IUserDao
@Service
public class UserService {
	@Autowired
	private IUserDao userDao;
	public void save(){
		userDao.save();
	}
}

此时会就出错:因为Spring不知道你用的是哪一个dao的实现

  • 4.2.解决的方案:为dao生成的bean加上名称,我们在调用的时候确定名称即可。
@Repository("userJdbcDao")
public class UserJdbcDaoImpl  implements IUserDao{
	public void save(){
		System.out.println("保存数据xxxx....");
	}
}
@Repository("userJpaDao")
public class UserJpaDaoImpl  implements IUserDao{
	public void save(){
		System.out.println("保存数据xxxx....");
	}
}

5.调用名称两套方案:

  • 方案一:使用@Autowired
@Service
public class UserService {
	@Autowired
	@Qualifier("userJdbcDao")
	private IUserDao userDao;
	public void save(){
		userDao.save();
	}
}
  • 方案二:使用@Resource
@Service
public class UserService {
	@Resource(name="userJpaDao")
	private IUserDao userDao;
	public void save(){
		userDao.save();
	}
}
  • 如果你用的是Spring的注解,尽量全部使用Spring的标签

三、Spring的AOP

1.AOP概述

  • 定义: 面向切面编程(面向方面编程)
  • AOP可以用于事务管理,日志管理,性能监测等地方
  • AOP应用场景:
    • 咱们写代码都知道,如果多个类出现了相同的代码,就应该抽取一个父类,然后把这些公共的代码都写在父类中。
    • 比如说老鹰,鸽子,麻雀,它们都可以翱翔于天际,

2.Xml版实现AOP

  • 1.添加jar文件
  • aop,aspects

spring-framework-4.1.2.RELEASE-dependencies\org.aopalliance\com.springsource.org.aopalliance\1.0.0\com.springsource.org.aopalliance-1.0.0.jar

spring-framework-4.1.2.RELEASE-dependencies\org.aspectj\com.springsource.org.aspectj.weaver\1.6.8.RELEASE\com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

  • 2.添加aop命名空间
xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd

spring.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:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- 业务增强的bean -->
    <bean id="transactionManager" class="cn.itsource._09_SpringAOP_XML.transaction.TransactionManager"/>

    <!-- 被代理对象 -->
    <bean id="userServiceImpl" class="cn.itsource._09_SpringAOP_XML.service.UserServiceImpl"></bean>

    <!--
        xml配置AOP
    -->
    <aop:config>
        <!--
            expression 表达式
            声明一个切点【何时何地】
                第一个星号:表示任意返回类型
                cn.itsource._09_SpringAOP_XML.service:包名称
                包名称后面的两个点..:两个点表示当前包或者当前包的子包,不限制包的级别
                第二个星号:任意类名称
                第三个星号:任意方法名称
                (..):任意参数列表
        -->
        <aop:pointcut id="myPointcut" expression="execution(* cn.itsource._09_SpringAOP_XML.service..*.*(..))"/>
        <!-- 切面通知:要做什么 业务逻辑增强 -->
        <aop:aspect ref="transactionManager">
            <!--
                aop:before 前置通知:表示在你调用myPointcut指向的方法之前调用 transactionManager的bean对象的begin方法
            -->
            <!--<aop:before method="begin" pointcut-ref="myPointcut"/>-->
            <!-- aop:after-returning 后置通知 -->
            <!--<aop:after-returning method="commit" pointcut-ref="myPointcut"/>-->
            <!-- aop:after-throwing 异常通知 相当于catch语句块内部执行的事务回滚 -->
            <!-- <aop:after-throwing method="rollback" pointcut-ref="myPointcut"/>-->
            <!-- aop:after 最终通知 相当于finally语句块内部要执行的关闭资源等逻辑代码 -->
            <!--<aop:after method="finalM" pointcut-ref="myPointcut"/>-->

            <!-- aop:around 环绕通知【推荐使用】,用来代替上面的四个通知,自定义增强业务逻辑 -->
            <aop:around method="around" pointcut-ref="myPointcut"/>

        </aop:aspect>
    </aop:config>

</beans>

在这里插入图片描述

service

public interface IUserService {

    void test();

    void add();

}
@Service
public class UserServiceImpl implements IUserService {
    @Override
    public void add() {
        //int i = 10/0;
        System.out.println("add方法");
    }
    @Override
    public void test() {
        System.out.println("11111111111");
    }
}
public class TransactionManager {

    public void begin(){
        System.out.println("开启事务");
    }

    public void commit(){
        System.out.println("提交事务");
    }

    public void rollback(){
        System.out.println("事务回滚");
    }

    public void finalM(){
        System.out.println("释放资源");
    }

    /**
     * 环绕通知的业务增强:自定义增强业务逻辑
     * @param joinPoint
     * @return
     */
    public Object around(ProceedingJoinPoint joinPoint){
        Object obj = null;
        try {
            //执行目标方法之前 开启事务
            this.begin();

            //执行目标方法
            obj = joinPoint.proceed();

            //执行目标后 提交事务
            this.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //事务回滚
            this.rollback();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
            //事务回滚
            this.rollback();
        } finally {
            //关闭资源
            this.finalM();
        }
        return obj;
    }

}

测试


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:cn/itsource/_09_SpringAOP_XML/test/spring.xml")
public class SpringAOPTest {

    @Autowired
    private IUserService userService;

    @Test
    public void test() throws Exception {
        System.out.println(userService);
        System.out.println(userService.getClass());//com.sun.proxy.$Proxy15
        userService.test();
        userService.add();
    }

}

3.注解版

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

    <!-- 扫描包 -->
    <context:component-scan base-package="cn.itsource._10_SpringAOP_Annotation"/>

    <!-- 开启注解支持【默认就是开启的】 -->
    <context:annotation-config/>

    <!-- 自动生成代理对象 -->
    <aop:aspectj-autoproxy/>

</beans>

service层同上

TransactionManager:

package cn.itsource._10_SpringAOP_Annotation.transaction;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Component
@Aspect//@Aspect 表示当前类是一个切面
public class TransactionManager {

    //自定义一个切点【代替了xml配置的aop:pointcut标签】
    @Pointcut("execution(* cn.itsource._10_SpringAOP_Annotation.service..*.*(..))")
    public void aaa(){}

    /**
     *  aaa()相当于xml配置文件的aop:pointcut标签的id属性
     */
    //@Before("aaa()")
    public void begin(){
        System.out.println("开启事务");
    }

    //@AfterReturning("aaa()")
    public void commit(){
        System.out.println("提交事务");
    }

    public void rollback(){
        System.out.println("事务回滚");
    }

    public void finalM(){
        System.out.println("释放资源");
    }

    /**
     * 环绕通知的业务增强:自定义增强业务逻辑
     * @param joinPoint
     * @return
     */
    @Around("aaa()")
    public Object around(ProceedingJoinPoint joinPoint){
        Object obj = null;
        try {
            //执行目标方法之前 开启事务
            this.begin();

            //执行目标方法
            obj = joinPoint.proceed();

            //执行目标后 提交事务
            this.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //事务回滚
            this.rollback();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
            //事务回滚
            this.rollback();
        } finally {
            //关闭资源
            this.finalM();
        }
        return obj;
    }

}

测试


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:cn/itsource/_10_SpringAOP_Annotation/test/spring.xml")
public class SpringAOPTest {

    @Autowired
    private IUserService userService;

    @Test
    public void test() throws Exception {
        System.out.println(userService);
        System.out.println(userService.getClass());//com.sun.proxy.$Proxy15
        //userService.test();
        userService.add();
    }

}

总结

  • AOP是面向切面编程,是对咱们OOP的一个补充,Spring的Aop允许咱们在方法的前后加上相应的功能增强。
  • Spring的Aop是使用代理模式完成的,如果是有接口的类,使用JDK代理模式,如果没有接口的类,使用CGLIB代理模式。
  • 咱们自己使用AOP太麻烦,Spring让我们通过简单的配置即可完成AOP。
  • 第一种配置:XML 第二种配置:注解
  • 配置的时候注意找到何时(方法前后,异常),何地(哪些类的哪些方法),做什么(安全中是添加事务)
EnlightenGAN训练复现记录 记录EnlightenGAN过程中的问题和解决方式。提示:以下是本篇文章正文内容,下面案例可供参考。 阅读详情

相关推荐

从零构建HFSS连接器仿真模型:以SMP接口的精准复现为例

本文详细介绍了如何从零构建HFSS连接器仿真模型,以SMP接口的精准复现为例。通过获取官方模型、导入技巧、信号路径提取和介质结构复现等步骤,帮助工程师避免常见错误,提升高频电路仿真的准确性。文章特别强调了模型精度对仿真结果的影响,并提供了实用的调试和管理建议。

weixin_29041767的博客 430

Spring的三种注入方式详解_官方推荐构造器注入

今天在看项目代码的时候发现在依赖注入的时候使用了构造器注入,之前使用过 Field 注入和 Setter 方法注入,对构造器注入不是很了解。经过查阅资料看到,Spring 推荐使用构造器注入的方式,下面介绍构造器注入到底有什么玄机。...

Eliauk4的博客 1万+

深度学习中的注意力机制

最近两年,注意力模型(Attention Model)被广泛使用在自然语言处理、图像识别及语音识别等各种不同类型的深度学习任务中,是深度学习技术中最值得关注与深入了解的核心技术之一。本文以机器翻译为例,深入浅出地介绍了深度学习中注意力机制的原理及关键计算机制,同时也抽象出其本质思想,并介绍了注意力模型在图像及语音等领域的典型应用场景。

优快云人工智能 4万+

spring注解设置名称注入还是类型注入

@Autowire 默认按照类型装配,默认情况下它要求依赖对象必须存在如果允许为null,可以设置它required属性为false,如果我们想使用按照名称装配,可 以结合@Qualifier注解一起使用; @Resource默认按照名称装配,当找不到与名称匹配的bean才会按照类型装配,可以通过name属性指定,如果没有指定name属 性,当注解标注在字段上,即默认取字段的名称

xiaojiahao_kevin的博客 4610

Vivado SDK中LWIP库版本冲突与RTL8211FDI兼容性实战解析

本文深入解析Vivado 2019.1 SDK中LWIP 1.0库与RTL8211FDI千兆PHY芯片的版本冲突问题,并提供实战解决方案。通过手动移植高版本LWIP库、整合第三方驱动及优化BSP配置,有效解决了以太网通信兼容性问题,确保千兆性能稳定运行。

ios99的博客 273

【AI实战】用Coze工作流打造抖音视频文案提取神器——从单链接到批量处理的进阶指南

本文详细介绍了如何利用Coze工作流打造抖音视频文案提取工具,从单链接处理到批量提取的进阶指南。通过AI技术和工作流的结合,用户可以高效提取抖音视频的ASR和OCR文本,大幅提升内容创作效率。文章还涵盖了性能优化、异常处理及实际应用场景扩展,助力开发者快速实现抖音文案自动化提取。

weixin_29210759的博客 280

Spring自动注入,类型注入、名称注入(两种方式)

为什么要用自动注入,因为在bean很多或者自定义的类很多的情况下,就要在xml文件里一直写bean并且还要将每个属性以set(构造方法)入参的方式引入bean里,这样耦合性也会变高,也比较麻烦 将类属性注入到Spring容器中有几种方式 @Autowired 按类型注入 @Qualifier (与@Autowired搭配按名称) @Resource 按名称注入 Java...

qq_41767337的博客 2万+

使用DeepSeek、MCP和AKShare实现智能金融问答系统技术方案

DeepSeek是由深度求索公司开发的大规模语言模型,最新版本DeepSeek-V3采用混合专家(MoE)架构,拥有671B参数,激活37B参数,在多项基准测试中表现优异3。要使用DeepSeek的API服务:访问DeepSeek平台注册账号获取API Key(形如AKShare是基于Python的金融数据接口库,提供股票、基金、期货、宏观经济等领域的海量数据。主要特点包括:免费开源,数据源丰富支持多种数据格式(DataFrame/JSON)持续更新维护安装命令。

Kin 3174

Spring学习第5篇:自动注入(autowire)详解

xml中手动注入存在的不足之处,可以通过自动注入的方式来解决,本文介绍了3中自动注入:通过名称自动注入、通过类型自动注入、通过构造器自动注入按类型注入中有个比较重要的是注入匹配类型所有的bean,可以将某种类型所有的bean注入给一个List对象,可以将某种类型的所有bean按照bean名称->bean对象的映射方式注入给一个Map对象,这种用法比较重要,用途比较大,要掌握spring中还有其他自动注入的方式,用起来会更爽,后面的文章中我们会详细介绍。

怪咖@的博客 4225

别再死记硬背了!用LTspice和Simulink仿真,5分钟搞懂巴特沃斯、切比雪夫、贝塞尔滤波器的区别

本文通过LTspice和Simulink仿真工具,直观对比了巴特沃斯、切比雪夫和贝塞尔滤波器的特性差异。从通带波纹、过渡带陡峭度到相位线性度,详细解析了三种经典滤波器的设计哲学与应用场景,帮助工程师和学生快速掌握滤波器选型技巧,提升电路设计效率。

weixin_33910191的博客 523

Python 爬虫实战:爬取 BOSS 直聘职位,实现岗位要求关键词提取

摘要:本文基于BOSS直聘数据分析师岗位信息,采用Python爬虫技术获取职位数据,通过文本分析和可视化方法研究岗位技能需求特征。研究首先设计爬虫程序获取职位基本信息和岗位要求文本,经数据清洗后运用jieba分词和词频统计提取关键词。结果显示SQL、Python为最核心技能,不同级别岗位需求差异明显:初级重基础数据处理,高级需建模和管理能力;行业间亦存在差异,互联网关注用户增长,金融侧重风控。研究为求职者技能提升提供了数据支持,同时展示了从非结构化文本中挖掘有价值信息的完整流程。

2503_91057718的博客 1766

Spring 构造器注入

从Spring3.0开始,Spring可以通过注解的方式来配置Bean。这里先介绍以传统的XML配置式来配置Bean。用一场选秀比赛来模拟Spring装备Bean过程。参赛选手都实现了这个Performer接口。

qq_43773170的博客 404

毕设帮扶:从0到1搭建基于YOLOv5的打架斗殴检测系统——助你搞定深度学习毕设

做完这个毕设,你已经掌握了从数据准备到模型部署、界面开发的全流程。把模型部署到边缘设备(如安防摄像头的嵌入式系统)上,实现本地化实时检测与报警;加入行为严重程度分析(如轻微推搡 vs 严重斗殴)、涉事人员数量统计,让系统从“检测”升级为“智能安防决策”;尝试融合声音、红外等多模态数据,打造全方位的暴力事件监测系统。按照这个教程一步步做,你的毕设肯定能做得很扎实。要是过程中遇到啥问题,别担心,慢慢梳理或者咱们一起聊聊,一定能把这个毕设做成你满意的作品。

LXY_LOVE36的博客 122

Spring-构造注入&注解注入&代理模式&AOP

Spring-构造注入&amp;注解注入&amp;代理模式&amp;AOP 一、spring的依赖注入方式 什么叫做注入? 一个类里面依赖于另外一个类,然后spring把类的对象创建出来,然后注入到相应的类里面过程 1.普通的注入 1)普通 set方法注入 ​ setName(String name) &lt;property name="name" value="xxxx"&gt; 2.构造参...

sdadaada的博客 405

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Spring_构造注入&注解注入&代理模式&AOP

文章目录1 依赖注入1.1 依赖注入方式1.1.1 普通set注入1.2 数组注入1.3 List /Set Map 集合注入1.4 Properties 注入1.5 xml注入方式2 AOP2.1 什么是AOP2.2 AOP术语3 AOP实现3.1 添加aop命名空间3.2 前置增强(通知)3.3 环绕增强3.4 注解版4 AOP代理模式4.1静态与动态代理 1 依赖注入 概念: 一个类里面依赖...

Java_pipixia的博客 522

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

深度分析Spring中的构造器注入

深入源码分析Spring中的构造器注入 文章目录深入源码分析Spring中的构造器注入1. 示例疑问点小结2. 依赖注入伊始3. 初始化Bean4.总结 在往期文章中我没有提到在Spring中是如何将Bean注入到构造器,其实这个过程发生在实例化Bean时期,由AbstractAutowireCapableBeanFactory的createBeanInstance方法来做的。 若想快速得到结论...

|-| [- |_ |_ () 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

构造注入&注解注入&AOP

构造注入 导入所需要的包 2.构造注入的方式 方式一:通过名称注入 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191206092755157.png 方式二:索引值注入 方式三:通过类型注入 方式四:外部Bean引入 方式五:内部Bean引入 属性注入 1.简单属性注入 2.集合属性注入 &gt; 3.数组 &...

Echouuu的博客 547

Spring的三种注入方式:构造方法注入,set方法注入,注解注入

本文演示三种值注入方式和三层模式下的注解注入获取对象 首先是搭建基本的Spring运行环境导入四个基本的核心jar包和两个日志包 在src根目录下新建bean.xml的配置文件,同时引入dtd约束 一、构造函数注入 在bean.xml中配置 在测试类中测试是否成功获得对象实例,并注入数据 运行结果图: 二、set方法注入 首先在类中必须有成员属性的set方法 接着在bean.xml中...

后端开发 1万+

Spring6-基于注解管理Bean-@Autowired属性注入&set方法注入&构造方法注入&Resource JDK注入

Spring 提供了以下多个注解,这些注解可以直接标注在 Java 类上,将它们定义成 Spring Bean。|注解|说明 |

qq_35140497的博客 1647

Spring构造注入注解注入&AOP

一、依赖注入 1.导包 &lt;?xml version="1.0" encoding="UTF-8"?&gt; 4.0.0 &lt;groupId&gt;cn.itsource&lt;/groupId&gt; &lt;artifactId&gt;spring-day2&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; ...

wjc78242663的专栏 616

Spring的构造器注入

一、前言 ​ Spring框架对Java开发的重要性不言而喻,其核心特性就是IOC(Inversion of Control, 控制反转)和AOP,平时使用最多的就是其中的IOC,我们通过将组件交由Spring的IOC容器管理,将对象的依赖关系由Spring控制,避免硬编码所造成的过度程序耦合。前几天的时候,笔者的同事问我为什么要使用构造器的注入方式,我回答说因为Spring文档推荐这种,而说不出为什么 T^T,后面抽时间了解了一下,下面就是笔者要讨论的就是其注入方式。 二、常见的三种注入方式 ​ 2、1

大白菜的博客 1万+

spring:setter注入构造器注入注解注入

一。内容回顾 简述对spring框架的了解 优点 高内聚低耦合 可拔插式设计模式 XML配置 便于维护 Sping 可以和各大优秀的框架很好结合(Struts2 springmvc mybatis hibernate) Spring 一站式开发(springmvc spring JdbcTemplate) 底层原理:反射,代理机制 搭建spring框架步骤 1.导入jar包 2.创建spring...

java_dingbg的博客 3959

Spring~用注解读取bean(属性注入、构造方法注入、set注入)

文章目录注解@Autowired.属性注入Setter注入构造方法注入三种注入的优缺点注解@Resource.1.属性注入2.构造方法注入@Resource与@Autowired区别注入对象名称问题 通过注解从spring中储存和获取bean对象是非常简单的一种方法,前面我们已经介绍了如何将bean存入spring容器中,这里我们将了解如何通过注解将bean从spring容器中再读取出来。 读取bean对象也叫对象装配、对象注入、依赖注入,就是将获取出的对象放到某个类中,让这个类进行使用。 对象注入: 如

zxc的博客 8991

Spring 属性注入和注解自动注入

Spring属性 xml文档注入和注解自动注入

m0_52325708的博客 2712

Spring | Spring通过注解注入Bean的四种方式

Spring 注解的方式注入Bean 官方定义:IoC又叫依赖注入(DI)。它描述了对象的定义和依赖的一个过程。依赖的对象通过构造参数、工厂方法参数或者属性注入,当对象实例化后依赖的对象才被创建,当创建bean后容器注入这些依赖对象。这个过程基本上是反向的。 方法详情 1.在Spring中,一个类我们为它加上注解就可以被识别为一个Bean。 例如你在一个类上加上一个@Component注解...

cafeshadow的博客 1万+
上一篇: 代理模式
下一篇: 请不要做浮躁的人(编程忠告)
Yuncoco
博客等级 码龄8年 15粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值