Spring6依赖注入-set注入

简介: 记基础Spring6依赖注入-set注入
Set注入,基于set方法实现的,底层通过反射机制调用属性对应的set方法然后给属性赋值。这种方式要求属性必须对外提供set方法。
#pom.xml配置
<!--    打包方式jar-->
    <packaging>jar</packaging>
    <!--配置多个仓库 -->
    <repositories>
        <!-- Spring6 -->
        <repository>
            <id>repository.spring.milestone</id>
            <name>Spring Milestone Repository</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <!-- 依赖-->
    <dependencies>
        <!--  log4j2的依赖-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.19.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j2-impl</artifactId>
            <version>2.19.0</version>
        </dependency>
        <!-- Spring context依赖
             当引入Spring context依赖后,表示将Spring的基础依赖引入
             如果想使用spring的jdbc,或其他的tx,那么还需要再次添加依赖
        -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.0-M2</version>
        </dependency>
        <!--junit依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
#log4j2.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <loggers>
<!--   level指定日志级别 从低到高 ALL<TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF     -->
        <root level="DEBUG"> <!-- DEBUG意思是错误信息从DEBUG开始往右 -->
            <appender-ref ref="spring6log"/>
        </root>
    </loggers>
    <appenders>
<!--        输出日志信息到控制台-->
        <console name="spring6log" target="SYSTEM_OUT">
            <!--        -->
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%t] %-3level %logger{1024} - %msg%n"/>
        </console>
    </appenders>
</configuration>

图片.png

#Dao层
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class testDao {
    private static final Logger logger = LoggerFactory.getLogger(testDao.class);//记录SpringTest.class类的日记
    public void insert(){
        logger.info("testDao----");
    }
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UserDao {
    private static final Logger logger = LoggerFactory.getLogger(UserDao.class);//记录SpringTest.class类的日记
    public void insert(){
        logger.info("insert正在被调用----");
    }
}

图片.png

图片.png

#Service层
public class UserService {
    private UserDao userDao;
    private testDao testDao;
    //IDEA生成的set方法符合javabean规范
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public void setTestDao(com.spring6.dao.testDao testDao) {
        this.testDao = testDao;
    }
    public void saveUser(){
        //保存用户信息到数据库
        //set注入的话,必须提供一个set方法. Spring容器会调用这个set方法,来给userDao属性赋值。
        userDao.insert();
        testDao.insert();
    }
}

图片.png

#Springconfig.xml文件配置
<!--    id:唯一,
        calss:类的全限定名称
-->
<!--    配置dao-->
    <bean id="UserDaobean" class="com.spring6.dao.UserDao"></bean>
    <bean id="testDaobean" class="com.spring6.dao.testDao"></bean>
<!--    配置server-->
    <bean id="UserServicebean" class="com.spring6.service.UserService"> <!--创建UserServicebean对象-->
<!--       Spring调用对应的set方法,需配置property标签-->
<!--        name属性怎么指定值:set方法的方法名,去掉set,把首字母改为小写-->
<!--        ref引用,ref指定的是哟啊注入的bean的id-->
        <property name="userDao"  ref="UserDaobean"></property>
        <property name="testDao" ref="testDaobean"></property>
    </bean>

图片.png

#测试类
public class Springtest {
    @Test
    public void testSet(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("Springconfig.xml");
        UserService userService =applicationContext.getBean("UserServicebean", UserService.class);
        userService.saveUser();
    }
}

图片.png

目录
相关文章
|
3月前
|
Java Spring
在使用Spring的`@Value`注解注入属性值时,有一些特殊字符需要注意
【10月更文挑战第9天】在使用Spring的`@Value`注解注入属性值时,需注意一些特殊字符的正确处理方法,包括空格、引号、反斜杠、新行、制表符、逗号、大括号、$、百分号及其他特殊字符。通过适当包裹或转义,确保这些字符能被正确解析和注入。
180 3
|
3月前
|
Java 测试技术 程序员
为什么Spring不推荐@Autowired用于字段注入?
作为Java程序员,Spring框架在日常开发中使用频繁,其依赖注入机制带来了极大的便利。然而,尽管@Autowired注解简化了依赖注入,Spring官方却不推荐在字段上使用它。本文将探讨字段注入的现状及其存在的问题,如难以进行单元测试、违反单一职责原则及易引发NPE等,并介绍为何Spring推荐构造器注入,包括增强代码可读性和维护性、方便单元测试以及避免NPE等问题。通过示例代码展示如何将字段注入重构为构造器注入,提高代码质量。
116 1
|
9天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
23天前
|
Java Spring
一键注入 Spring 成员变量,顺序编程
介绍了一款针对Spring框架开发的插件,旨在解决开发中频繁滚动查找成员变量注入位置的问题。通过一键操作(如Ctrl+1),该插件可自动在类顶部添加`@Autowired`注解及其成员变量声明,同时保持光标位置不变,有效提升开发效率和代码编写流畅度。适用于IntelliJ IDEA 2023及以上版本。
一键注入 Spring 成员变量,顺序编程
|
25天前
|
Java 数据库 数据安全/隐私保护
轻松掌握Spring依赖注入:打造你的登录验证系统
本文以轻松活泼的风格,带领读者走进Spring框架中的依赖注入和登录验证的世界。通过详细的步骤和代码示例,我们从DAO层的创建到Service层的实现,再到Spring配置文件的编写,最后通过测试类验证功能,一步步构建了一个简单的登录验证系统。文章不仅提供了实用的技术指导,还以口语化和生动的语言,让学习变得不再枯燥。
39 2
|
3月前
|
缓存 Java Spring
源码解读:Spring如何解决构造器注入的循环依赖?
本文详细探讨了Spring框架中的循环依赖问题,包括构造器注入和字段注入两种情况,并重点分析了构造器注入循环依赖的解决方案。文章通过具体示例展示了循环依赖的错误信息及常见场景,提出了三种解决方法:重构代码、使用字段依赖注入以及使用`@Lazy`注解。其中,`@Lazy`注解通过延迟初始化和动态代理机制有效解决了循环依赖问题。作者建议优先使用`@Lazy`注解,并提供了详细的源码解析和调试截图,帮助读者深入理解其实现机制。
76 1
|
5月前
|
Java Spring 容器
彻底改变你的编程人生!揭秘 Spring 框架依赖注入的神奇魔力,让你的代码瞬间焕然一新!
【8月更文挑战第31天】本文介绍 Spring 框架中的依赖注入(DI),一种降低代码耦合度的设计模式。通过 Spring 的 DI 容器,开发者可专注业务逻辑而非依赖管理。文中详细解释了 DI 的基本概念及其实现方式,如构造器注入、字段注入与 setter 方法注入,并提供示例说明如何在实际项目中应用这些技术。通过 Spring 的 @Configuration 和 @Bean 注解,可轻松定义与管理应用中的组件及其依赖关系,实现更简洁、易维护的代码结构。
71 0
|
5月前
|
缓存 Java 数据库连接
Spring Boot 资源文件属性配置,紧跟技术热点,为你的应用注入灵动活力!
【8月更文挑战第29天】在Spring Boot开发中,资源文件属性配置至关重要,它让开发者能灵活定制应用行为而不改动代码,极大提升了可维护性和扩展性。Spring Boot支持多种配置文件类型,如`application.properties`和`application.yml`,分别位于项目的resources目录下。`.properties`文件采用键值对形式,而`yml`文件则具有更清晰的层次结构,适合复杂配置。此外,Spring Boot还支持占位符引用和其他外部来源的属性值,便于不同环境下覆盖默认配置。通过合理配置,应用能快速适应各种环境与需求变化。
57 0
|
5月前
|
安全 Java 开发者
开发者必看!@Resource与private final的较量,Spring Boot注入技巧大揭秘,你不可不知的细节!
【8月更文挑战第29天】Spring Boot作为热门Java框架,其依赖注入机制备受关注。本文通过对比@Resource(JSR-250规范)和@Autowired(Spring特有),并结合private final声明的字段注入,详细探讨了两者的区别与应用场景。通过示例代码展示了@Resource按名称注入及@Autowired按类型注入的特点,并分析了它们在注入时机、依赖性、线程安全性和单一职责原则方面的差异,帮助开发者根据具体需求选择最合适的注入策略。
202 0
|
28天前
|
算法
你对Collection中Set、List、Map理解?
你对Collection中Set、List、Map理解?
60 18
你对Collection中Set、List、Map理解?