Java --- Spring6之Set方法注入

news2024/9/23 5:34:06

目录

一、注入外部Bean与内部Bean

二、简单类型注入

 三、级联属性赋值

四、注入数组

 五、List与Set注入

 六、Map和Properties注入


一、注入外部Bean与内部Bean

public class OrderDao {
    private static final Logger logger = LoggerFactory.getLogger(UserDao.class);
    public void insert(){
        logger.info("订单正在生成...");
    }
}
public class OrderService {
    private OrderDao orderDao;

    public void setOrderDao(OrderDao orderDao) {
        this.orderDao = orderDao;
    }

    /**
     * 生产订单的业务方法
     */
    public void save(){
        orderDao.insert();
    }
}
<?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">
    <!--声明Bean-->
    <bean id="orderBean" class="com.cjc.spring6.dao.OrderDao"></bean>
    <bean id="orderServiceBean" class="com.cjc.spring6.service.OrderService">
        <!--使用ref引入,这里就是实现注入外部Bean-->
        <property name="orderDao" ref="orderBean"/>
    </bean>

    <bean id="orderServiceBean1" class="com.cjc.spring6.service.OrderService">
        <property name="orderDao">
           <!--在property标签中嵌套bean标签,就是内部Bean-->
            <bean class="com.cjc.spring6.dao.OrderDao"></bean>
        </property>
    </bean>
</beans>
 @Test
    public void getOrder(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring02.xml");
        OrderService orderService = applicationContext.getBean("orderServiceBean", OrderService.class);
        orderService.save();
    }

打印结果: 

2022-11-13 23:30:38.767 [main] INFO  com.cjc.spring6.dao.UserDao - 订单正在生成...

二、简单类型注入

引入依赖

 <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>
@Data
@ToString
public class User {
    private String username;
    private String password;
    private int age;
}

配置文件:

   <!--注入简单类型-->
    <bean id="userBean" class="com.cjc.spring6.bean.User">
        <!--给简单属性赋值使用value属性-->
        <property name="username" value="老王"/>
        <property name="password" value="123456"/>
        <property name="age" value="18"/>
     </bean>

测试类:

 @Test
    public void getUserType(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring02.xml");
        User user = applicationContext.getBean("userBean", User.class);
        System.out.println(user);
    }

测试结果:

 简单类型的注入应用于数据库数据源管理:

@Data
@ToString
public class MyDataSource implements DataSource {
    private String driver;
    private String url;
    private String name;
    private String password;
    @Override
    public Connection getConnection() throws SQLException {
        return null;
    }

    @Override
    public Connection getConnection(String username, String password) throws SQLException {
        return null;
    }

    @Override
    public PrintWriter getLogWriter() throws SQLException {
        return null;
    }

    @Override
    public void setLogWriter(PrintWriter out) throws SQLException {

    }

    @Override
    public void setLoginTimeout(int seconds) throws SQLException {

    }

    @Override
    public int getLoginTimeout() throws SQLException {
        return 0;
    }

    @Override
    public Logger getParentLogger() throws SQLFeatureNotSupportedException {
        return null;
    }

    @Override
    public <T> T unwrap(Class<T> iface) throws SQLException {
        return null;
    }

    @Override
    public boolean isWrapperFor(Class<?> iface) throws SQLException {
        return false;
    }
}

spring的配置文件:

<bean id="myDataSource" class="com.cjc.spring6.jdbc.MyDataSource">
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/spring6"/>
        <property name="name" value="root"/>
        <property name="password" value="123456"/>
    </bean>

测试代码:

@Test
    public void getData(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring02.xml");
        MyDataSource dataSource = applicationContext.getBean("myDataSource", MyDataSource.class);
        System.out.println(dataSource);
    }

测试结果:

 三、级联属性赋值

@Data
@ToString
public class Clazz {
    private String name;
}
@Data
@ToString
public class Student {
    private String name;
    private Clazz clazz;
}

spring配置文件:

<?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">
   <!--使用级联属性赋值需要注意:
       1、配置的顺序不能颠倒
       2、clazz属性必须提供getter方法-->
    <bean id="clazzBean" class="com.cjc.spring6.bean.Clazz"></bean>
    <bean id="student" class="com.cjc.spring6.bean.Student">
        <property name="name" value="小丽"/>
        <property name="clazz" ref="clazzBean"/>
        <!--级联属性赋值-->
        <property name="clazz.name" value="学期班"/>
    </bean>
</beans>

测试代码:

  @Test
    public void getStudent(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring3.xml");
        Clazz clazz = applicationContext.getBean("clazzBean", Clazz.class);
        Student student = applicationContext.getBean("student", Student.class);
        System.out.println(clazz);
        System.out.println(student);
    }

测试结果:

四、注入数组

@Data
@ToString
public class Cat {
    private String name;
}
@Data
@ToString
public class ArrayLove {
    private String[]  love;
    private Cat[] cats;
}

spring配置文件

<?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">
    <bean id="cat" class="com.cjc.spring6.bean.Cat">
        <property name="name" value="小白"/>
    </bean>
    <bean id="love" class="com.cjc.spring6.bean.ArrayLove">
        <property name="love">
           <!--数组的属性为简单类型-->
            <array>
                <value>篮球</value>
                <value>羽毛球</value>
                <value>电影</value>
            </array>
        </property>
        <!--数组的属性为引用类型-->
        <property name="cats">
            <array>
                <ref bean="cat"/>
            </array>
        </property>
    </bean>
</beans>

测试代码:

 @Test
    public void getLove(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("array.xml");
        ArrayLove love = applicationContext.getBean("love", ArrayLove.class);
        System.out.println(love);
    }

测试结果:

 五、List与Set注入

@Data
@ToString
public class People {
    private List<String> skill;
    private Set<String> province;
}

spring的配置文件

<?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">
<bean id="people" class="com.cjc.spring6.bean.People">
    <property name="skill">
        <list>
            <value>洗衣</value>
            <value>做饭</value>
            <value>跳舞</value>
        </list>
    </property>
    <property name="province">
        <set>
            <value>四川</value>
            <value>上海</value>
        </set>
    </property>
</bean>
</beans>

测试代码:

   @Test
    public void getPeople(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("collection.xml");
        People people = applicationContext.getBean("people", People.class);
        System.out.println(people);
    }

People(skill=[洗衣, 做饭, 跳舞], province=[四川, 上海])

 六、Map和Properties注入

@Data
@ToString
public class MapTest {
    //注入map集合
    private Map<Integer,String> phones;
   //注入属性类
   //Properties的父类是Hashtable Hashtable实现了Map接口,本质上相当于Map集合
   //键值的类型都是String类型
   private Properties properties;
}
<?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">
<bean id="mapBean" class="com.cjc.spring6.bean.MapTest">
    <property name="phones">
        <map>
            <entry key="1" value="123456789"/>
            <entry key="2" value="12345678"/>
            <entry key="3" value="123456780"/>
        </map>
    </property>
    <property name="properties">
        <props>
        <prop key="name">张三</prop>
        <prop key="password">123456</prop>
    </props>
    </property>
</bean>
</beans>
    @Test
    public void getMap(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("maptest.xml");
        MapTest mapBean = applicationContext.getBean("mapBean", MapTest.class);
        System.out.println(mapBean);
    }

MapTest(phones={1=123456789, 2=12345678, 3=123456780}, properties={password=123456, name=张三})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69120.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

led台灯哪个牌子效果最好?2022最新国产led灯品牌排行

目前台灯的发展非常迅速&#xff0c;已经到了全面led灯的时代&#xff0c;传统的卤素灯已经近乎完全淘汰&#xff0c;这不仅仅是跟技术的发展有关&#xff0c;也跟led灯本身的优势有关&#xff0c;各方面很适合做成护眼灯。 护眼灯为什么都是led灯&#xff1f; 护眼台灯使用le…

外卖配送系统搭建,骑手实时更新,路线规划更科学

在如今快节奏的现代生活&#xff0c;人们基本离不开外卖&#xff0c;这也催生了不少外卖配送系统的诞生&#xff0c;那你知道外卖配送系统搭建吗&#xff1f;如果想要一款外卖系统&#xff0c;如何着手呢&#xff1f; 要想开发一款成功的外卖配送系统&#xff0c;要先进行市场…

论文笔记|DeepWalk

简介 DeepWalk是由Bryan Perozzi&#xff0c;Rami Al-Rfou和Steven Skiena在2014年提出的&#xff0c;它是一种基于图的无监督特征学习方法&#xff0c;它有趣的点是将文本处理任务中词向量的处理思想迁移到了图特征学习上&#xff0c;就像处理句子得到word embedding一样&…

深入linux内核架构--进程线程

简介 进程和线程这两个词&#xff0c;每个程序员都十分熟悉&#xff0c;但是想要很清晰的描述出来却有一种不知道从何说起的感觉。所以今天结合一个具体的例子来描述一下进程与线程的相关概念&#xff1a;在terminal上敲出a.out这个自己编译出来可执行程序路径后&#xff0c;这…

【预测模型】基于随机蛙跳算法 SFLA优化神经网络实现数据回归预测附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Kafka 3.3.1 Kraft 多端口协议搭建

Kafka 3.3.1 Kraft 多端口协议搭建 序 Kafka 3.3.1 已经出来挺久了&#xff0c;很多公司还停留在 1.X/2.X 甚至 0.8 版本的 kafka&#xff0c;不是说不能用&#xff0c;但是用起来真的糟糕&#xff0c;况且现在 Kraft 已经正式推出了&#xff0c;早就该更新了。 本篇文章从实…

276 t230 二叉搜索树第k小的元素

题解 思路:定义一个全局变量,初值赋予k.中序遍历,每次访问一个,变量–,当该变量为0时,就把val值赋予另一个全局变量返回. class Solution {int resKthSmallest0;int countKthSmallest;// 276 t230 二叉搜索树第k小的元素public int kthSmallest(TreeNode root, int k) {count…

大数据人工智能实验室-大数据培训方案

随着计算机和信息技术的迅猛发展和普及应用&#xff0c;行业应用系统的规模迅速扩大&#xff0c;行业应用所产生的数据呈爆炸性增长。企业需要将隐藏在大批杂乱无章的数据中进行信息的集中、萃取和提炼&#xff0c;找出所研究对象的内在规律&#xff0c;从而对决策提供帮助&…

预训练模型-代码补全(二):Copilot(GitHub)

​ GitHub Copilot是一个为开发者提供的突破性的AI编程辅助工具&#xff0c;但这才是开始。 昨天&#xff0c;Copilot团队推出了一个名为GitHub Copilot Labs的VS Code配套扩展。它独立于&#xff08;并依赖于&#xff09;GitHub Copilot扩展。它可以用来解释代码和翻译代码。…

【元胞自动机】格子波尔兹曼模型研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【JNA】java springboot 动态读取动态库

【JNA】java springboot 动态读取动态库创建名为dynamic-lib-load.xml的文件资源目录结构如下工具类LibraryLoadDynamicParseUtil工具类调用我们在使用第三方动态库 时长出现动态库无法读取jar包内的动态库文件&#xff0c;以下代码希望对大家有帮助 废话不多说&#xff0c;上代…

【王道计算机网络笔记】数据链路层-局域网广域网

文章目录局域网局域网拓扑结构局域网传输介质局域网介质访问控制方法局域网的分类以太网以太网提供无连接、不可靠的服务以太网传输介质与拓扑结构的发展10BASE-T以太网适配器与MAC地址以太网的MAC帧高速以太网IEEE802标准MAC子层和LLC子层IEEE802.11有固定基础设施无线局域网无…

嵌入式:ARM体系结构详解

文章目录指令集与指令集架构主要计算机指令集架构PC及服务器领域嵌入式领域新生代ARM体系结构的演变ARM发展的历程指令集与指令集架构 指令&#xff1a;就是指挥计算机工作的命令&#xff0c;程序就是一系列按一定顺序排列的指令&#xff0c;计算机就是通过执行程序中的指令来…

11. softmax回归的简洁实现

通过深度学习框架的高级API也能更方便地实现softmax回归模型。 继续使用Fashion-MNIST数据集&#xff0c;并保持批量大小为256。 import torch from torch import nn from d2l import torch as d2lbatch_size 256 train_iter, test_iter d2l.load_data_fashion_mnist(batch…

在IDEA中配置Maven

文章目录Maven 简介Maven 下载与安装修改Maven配置文件Maven文件目录的含义配置IDEA的MavenMaven 简介 Maven 项目对象模型(POM)&#xff0c;可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的项目管理工具软件。 Maven 除了以程序构建能力为特色之外&#x…

数据库审核工具SQLE接口调用

点击上方蓝字关注我接上文数据库审核接口SQLE的探索使用&#xff0c;本次自定义接口进行调用&#xff0c;实现需求。1、创建自定义审核接口因直接调用SQLE的审核接口&#xff0c;会出现token过期&#xff0c;且审核及结果查询接口是分开的&#xff0c;因此&#xff0c;出于以上…

Mock模拟数据动态字节码编译插件优化

模块介绍 dmc-plugin-java 动态编译字节码 关于动态编译字节码技术参考&#xff1a; https://blog.csdn.net/huxiang19851114/article/details/127881616 优化如下&#xff1a; 动态文本类改为界面配置及数据库保存 数据库表结构&#xff1a; DROP TABLE IF EXISTS compi…

leetcode刷题 log day56(编辑距离总结篇~

583. 两个字符串的删除操作 【思路】这道题只有删除操作&#xff0c;两个字符串相等时&#xff0c;步数不变&#xff0c;不相等时&#xff0c;只能做删除操作&#xff0c;删除有三种情况&#xff1a;删除 word1 或删除 word2 或者两个字符串都删除&#xff0c;取三种情况的最小…

sytem clock for ctrl ms task and us/ms delay

Cortex-M3 的内核中包含一个 SysTick 时钟。SysTick 为一个 24 位递减计数器&#xff0c;SysTick 设定初值并使能后&#xff0c;每经过 1 个系统时钟周期&#xff0c;计数值就减 1。计数到 0 时&#xff0c;SysTick 计数器自动重装初值并继续计数&#xff0c;同时内部的 COUNTF…

网页性能优化

网页性能优化 文章目录网页性能优化[TOC](文章目录)前言1.前端脚本优化1.1 减少重绘、回流1.2 缓存dom选择与计算1.3 使用事件委托而不是批量绑定2.渲染优化2.1 使用CSS3开启GPU硬件加速提升网站动画渲染性能2.2 touchmove、scroll、input事件添加防抖3.加载优化3.1 合并小图片…