【spring】属性注入

【spring】属性注入【spring】属性注入

大家好,又见面了,我是你们的朋友全栈君。

      spring的属性注入是bean管理中的一个非常重要的内容,它可以通过有参数的构造函数注入属性,也可以通过set方法注入属性。包括基本类型的属性注入、对象类型的属性注入和复杂类型的属性注入。

一.基本类型

有参数构造

代码实现:

public class User{

	private String username;

	public User(String username) {
		this.username = username;
	}

	public void test1(){
		System.out.println("User....."+username);
	}	
}

spring配置文件实现:

        <!-- 使用有参数的构造注入属性 -->
        <bean id="user" class="cn.itcast.property.User">
        	<!-- 使用有参的构造注入 -->
        	<constructor-arg name="username" value="张三"></constructor-arg>
        </bean>

      有参数的构造函数注入属性的时候用的是<constructor-arg/>标签。

set方法设置

代码实现:

public class Book {

	private String bookname;
	//set方法
	public void setBookname(String bookname) {
		this.bookname = bookname;
	}
	
	public void demobook(){
		System.out.println("book......."+bookname);
	}	
}

spring配置文件实现:

        <!-- 使用set方法注入属性 -->
        <bean id="book" class="cn.itcast.property.Book">
        	<!-- 注入属性值 
        		name属性值:类里面定义的属性名称
        		value属性:设置具体的值 -->       	
        	<property name="bookname" value="Spring实战"></property>
        </bean>

      使用set方法注入属性时用的是<property/>标签。

二.对象类型

      我们在项目实战中,service一般都需要调用dao,这时候就需要把dao对象注入到service中。首先我们创建UserService和UserDao两个类,并在UserService类中定义UserDao类型的属性。

public class UserService {

	//1.定义dao类型属性
	private UserDao userDao;
	//生成set方法
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	
	public void add(){
		System.out.println("service.........");
		//在service里面得到dao类对象,才能调用dao里面的方法
		userDao.add();
	}
}
public class UserDao {

	public void add(){
		System.out.println("dao.........");
	}
}

      在配置文件中创建userService和userDao对象,并将userDao注入到userService中。

        <!-- 注入对象类型属性 -->
        <!-- 配置service和dao对象 -->
        <bean id="userDao" class="cn.itcast.ioc.UserDao"></bean>
        <bean id="userService" class="cn.itcast.ioc.UserService">
        	<!-- 注入dao对象
        		name属性值:service类里面属性名称
        		          字符串用value,对象用ref
        		ref属性:dao配置bean标签中id值 -->        	
        	 <property name="userDao" ref="userDao"></property>
        </bean>

三.复杂类型

      除了上面两种类型可以注入之外,还有复杂类型属性的注入,比如数组、list、map、properties等。

public class Person {

	private String[] arrs;
	private List<String> list;
	private Map<String,String> map;
	private Properties properties;

	public void setArrs(String[] arrs) {
		this.arrs = arrs;
	}
	public void setList(List<String> list) {
		this.list = list;
	}
	public void setMap(Map<String, String> map) {
		this.map = map;
	}
	public void setProperties(Properties properties) {
		this.properties = properties;
	}
	
	public void test(){
		System.out.println("arrs:"+arrs);
		System.out.println("list:"+list);
		System.out.println("map:"+map);
		System.out.println("properties:"+properties);
	}
}
<!-- 注入复杂类型属性值 -->
        <bean id="person" class="cn.itcast.ioc.Person">
        	<!-- 数组 -->
        	<property name="arrs">
        		<list>
        			<value>张三</value>
        			<value>李四</value>
        			<value>王五</value>
        		</list>
        	</property>
        	<!-- list -->
        	<property name="list">
        		<list>
        			<value>Tom</value>
        			<value>Bob</value>
        			<value>Mary</value>
        		</list>
        	</property>
        	<!-- map -->
        	<property name="map">
        		<map>
        			<entry key="aa" value="小明"></entry>
        			<entry key="bb" value="小红"></entry>
        			<entry key="cc" value="小美"></entry>
        		</map>
        	</property>
        	<!-- properties -->
        	<property name="properties">
        		<props>
        			<prop key="driverclass">com.mysql.jdbc.Driver</prop>
        			<prop key="username">root</prop>
        		</props>
        	</property>
        </bean>

      今天介绍的都是通过配置文件来实现bean管理,而我们平时经常用的是通过注解来管理bean,所以接下来将为大家介绍注解方式的bean管理。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105636.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pytorch 自定义卷积核进行卷积操作[通俗易懂]

    pytorch 自定义卷积核进行卷积操作[通俗易懂]一卷积操作:在pytorch搭建起网络时,大家通常都使用已有的框架进行训练,在网络中使用最多就是卷积操作,最熟悉不过的就是torch.nn.Conv2d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=True)通过上面的输入发现想自定义自己的卷积核,比如高斯…

    2022年5月28日
    39
  • Pycharm Terminal窗口运行程序「建议收藏」

    Pycharm Terminal窗口运行程序「建议收藏」anaconda配置好环境(一系列的准备操作,我不会,老师帮我弄的)最开始:base是一个根目录,共用环境在远端创建好一个自己的环境:condacreate-n环境名激活环境:sourceactivate环境名进入环境后下载的包才是在自己的目录下,如果在base那块下载会影响别人的环境下载包指令:pipinstall包名进入你远程环境下的目录:cd目录(这些都要配好,还是我不会)目录的话可以这样找运行:python文件名.py…

    2025年7月12日
    0
  • pytest运行_ios怎么清理应用缓存在哪里

    pytest运行_ios怎么清理应用缓存在哪里前言pytest运行完用例之后会生成一个.pytest_cache的缓存文件夹,用于记录用例的ids和上一次失败的用例。方便我们在运行用例的时候加上–lf和–ff参数,快速运行上一

    2022年7月31日
    2
  • BP神经网络算法改进文献_bp神经网络算法流程图

    BP神经网络算法改进文献_bp神经网络算法流程图周志华机器学习BP改进试设计一个算法,能通过动态调整学习率显著提升收敛速度,编程实现该算法,并选择两个UCI数据集与标准的BP算法进行实验比较。1.方法设计传统的BP算法改进主要有两类:-启发式算法:如附加动量法,自适应算法-数值优化法:如共轭梯度法、牛顿迭代法、Levenberg-Marquardt算法(1)附加动量项这是一种广泛用于加速梯度下降法收敛…

    2022年9月11日
    0
  • java浅拷贝和深拷贝的区别_js中深拷贝和浅拷贝的区别

    java浅拷贝和深拷贝的区别_js中深拷贝和浅拷贝的区别最近用到了clone方法,并且遭遇到各种奇怪的bug;一,浅拷贝浅拷贝:对基本类型的数据是值拷贝,对String类型的拷贝也可以看作是值拷贝,这里不做讨论;浅拷贝是什么呢,先上一段代码,对着看代码很容易理解: Vector&lt;Vector&gt;data=newVector&lt;Vector&gt;(); for(inti=0;i&lt;4;i++){ …

    2022年10月1日
    0
  • windows 10安装sqlyog详细步骤

    windows 10安装sqlyog详细步骤sqlyog下载链接:链接:https://pan.baidu.com/s/1D_iRna8V90omfHsKHyeBtg提取码:bqht复制这段内容后打开百度网盘手机App,操作更方便哦1.下载完以后解压,双击SQLyog-12.0.9-0.x642.如下图,选择Ok3.如图,点击下一步4.选择“我接受“许可证协议”中的条款(A)”单击下一步…

    2022年5月28日
    76

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号