spring的配置说明和属性抽取 ref注入属性及parent属性继承,实例1

本文介绍了Spring框架中配置文件的使用,包括实体类、测试类和Spring配置部分。强调了学习Spring不应急于求成,要逐步理解并结合实践,鼓励读者通过自我领悟和努力提升技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实体类

package indi.yxq.spring.entity;

public class User {
	private Integer user_id;
	private String user_name;
	public User() {
		System.out.println("User类构造方法");
	}
	public void setUser_id(Integer user_id) {
		this.user_id = user_id;
	}
	public void setUser_name(String user_name) {
		this.user_name = user_name;
	}
	@Override
	public String toString() {
		return "User [user_id=" + user_id + ", user_name=" + user_name + "]";
	}
	

}

package indi.yxq.spring.entity;

public class UserDao {
		private User user;
		
		public UserDao() {
			super();
			// TODO Auto-generated constructor stub
		}

		public void setUser(User user) {
			this.user = user;
		}

		@Override
		public String toString() {
			return "UserDao [user=" + user + "]";
		}
		
		
}

package indi.yxq.spring.entity;

public class UserHome extends UserDao{
	private UserDao userdao;
	public UserHome() {
	
	}
	
	public void setUserdao(UserDao userdao) {
		this.userdao = userdao;
	}
	@Override
	public String toString() {
		return "UserHome [userdao=" + userdao + "]";
	}
	
}

测试类

package indi.yxq.spring.test;

import indi.yxq.spring.entity.User;
import indi.yxq.spring.entity.UserDao;
import indi.yxq.spring.entity.UserHome;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

///Resource
@RunWith(SpringJUnit4ClassRunner.class)
//src下找:"classpath:Resource/application.xml"  或"/Resource/application.xml"
@ContextConfiguration("classpath:Resource/application.xml")
public class Mytest {
	
	//注解实例字段
	@Autowired
	User user;
	@Autowired
	UserDao userDao;
	@Autowired
	UserHome userHome;
	@Autowired
	BeanFactory beanfactory;
	@Autowired
	ApplicationContext context;
	@Test
	public void test(){
		user=beanfactory.getBean("myuser",User.class);
		user.setUser_id(0);
		user.setUser_name("张三");
		System.out.println(user.toString());
		
		user=beanfactory.getBean("myuser",User.class);
		user.setUser_id(1);
		user.setUser_name("王五");
		System.out.println(user.toString());
		
		//使用bean里面的name定义值访问,多个值用逗号隔开,记住id必须唯一的
		user=context.getBean("111",User.class);
		System.out.println(user.toString());
		user=context.getBean("/log",User.class);
		System.out.println(user.toString());
		
		//没有使用bean里面的属性抽取注入----ref
		userDao=beanfactory.getBean("myuserDao",UserDao.class);
		System.out.println("没有使用ref:"+userDao.toString());
		
		//使用bean里面的属性抽取注入----ref
		userDao=beanfactory.getBean("userDao",UserDao.class);
		System.out.println("使用ref:"+userDao.toString());
			
		//该bean.id里面abstract=true,指只抽取对象属性注入,不抽取对象,如果使用bean.id获取对象是会报错的,
		//要获取该bean.id的对象就通过parent继承bean.id的属性
		/*userDao=beanfactory.getBean("userDao1",UserDao.class);
		System.out.println("bean.id里面abstract=true:"+userDao.toString());
		*/			
		//----parent继承bean.id的属性,该bean.id不实例对象,abstract=true
		userDao=beanfactory.getBean("myuserDao1",UserDao.class);
		System.out.println("使用parent继承属性:"+userDao.toString());
		
		//----parent继承bean.id的属性,该bean.id不实例对象,同时使用ref引用注入属性
		userHome=beanfactory.getBean("myuserHome",UserHome.class);
		System.out.println("使用parent继承属性:"+userHome.toString());
		
	}
/**
 * 注入属性的继承
 * 使用bean里面的属性抽取注入----ref,注意:注入的属性必须有set该属性
 * 注意:Java代码是Java代码,配置spring是spring,不要混淆了
 * 
 * */
}

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" default-lazy-init="default">

<!-- 方案一 --><!-- scope="prototype"多例模式,默认单例scope="singleton" -->
<bean id="myuser" name="111,/log" class="indi.yxq.spring.entity.User" />
<bean id="myuserDao" class="indi.yxq.spring.entity.UserDao"/>

<!-- 方案二-->
<bean id="userDao"  class="indi.yxq.spring.entity.UserDao" >
	<property name="user" ref="myuser"></property>
</bean>
<!-- 方案三-使用了abstract该类的就失效了class可以不用了,class=任何都没有,可以等但是没有用 -->
<bean id="userDao1" abstract="true" >
	<property name="user" ref="myuser"></property>
</bean>

<!-- 方案四 使用parent继承指定bean.id对象注入该属性-->
<!-- parent==bean.id:继承那个bean的属性 -->
<bean id="myuserDao1" parent="userDao1" class="indi.yxq.spring.entity.UserDao"/>

<!-- 继续继承 -->
<!-- parent==bean.id:继承那个bean.id对象,同时使用ref给其他属性注入 -->
<!-- Java代码中如果该类extends父类,bean配置的属性继承如果本类找不到就回去父类找有没有该属性set,并注入属性信息如果都没有就会报错 -->
<bean id="myuserHome" parent="myuserDao1" class="indi.yxq.spring.entity.UserHome">
	<property name="userdao" ref="myuserDao"></property>
</bean>
</beans>

这行业就是学习什么都不要急,要一点一点的来,自己领悟就成功一半了,经后天的努力我相信你可以的,加油老铁!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值