初识 Spring(03)---(XML注入方式 / 注入类型)

简介: XML注入方式1.set 方式注入  2.构造方式注入  3.工厂方式注入set 方式注入1.ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.

XML注入方式

1.set 方式注入  2.构造方式注入  3.工厂方式注入

set 方式注入

1.ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

2.public class UserDaoImpl implements UserDao;

3.private UserDao dao;

ClassPathXmlApplicationContext 创建了一个 spring 容器后,产生  UserDao 和 dao  对象,并且将 UserDao对象 设置到 dao 对象的属性中,这是通过 set 方法设置的

文件目录:

代码:配置文件:applicationContext.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	
	<bean id="userDao" class="com.neuedu.dao.impl.UserDaoImpl"></bean>
	<bean id="userService" class="com.neuedu.service.UserService">
	<!-- set方法注入 -->
		<property name="dao" ref="userDao"></property>
	</bean>
</beans>
 

Test.java

package com.neuedu.test;
import com.neuedu.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {

	public static void main(String[] args) {
		
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		//UserService us= (UserService)ac.getBean("userService");
		
	}
 
}

UserDaoImpl.java

package com.neuedu.dao.impl;
import com.neuedu.dao.UserDao;
public class UserDaoImpl implements UserDao{
	public UserDaoImpl() {
		System.out.println("UserDaoImpl构造方法...");
	}
	
	public void save() {
		System.out.println("通过oracle数据库将用户信息保存到数据库中");
	}
	
	
}

UserService.java

package com.neuedu.service;
import com.neuedu.dao.UserDao;
import com.neuedu.dao.impl.UserDaoImpl;
public class UserService {
	
	public UserService() {
		System.out.println("UserService 构造方法..."); 
	}
	private UserDao dao;
	
	public void save() {
		dao.save();
		
		
		
	}

	public void setDao(UserDao dao) {
		System.out.println("setUserDao...");
		this.dao = dao;
	}
}
 

UserDao.java

package com.neuedu.dao;

public interface UserDao {
	 public void save();
}

输出:

构造器方式注入(必须有带参数的构造方法才可以)

代码:配置文件:applicationContext.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	
	<bean id="userDao" class="com.neuedu.dao.impl.UserDaoImpl"></bean>
	<bean id="userService" class="com.neuedu.service.UserService">
	<!-- set方法注入 -->
		<!-- <property name="dao" ref="userDao"></property> -->
		<!-- 构造方法注入 -->
		<constructor-arg ref="userDao"></constructor-arg>
	</bean>
</beans>
 

UserService.java

package com.neuedu.service;
import com.neuedu.dao.UserDao;
import com.neuedu.dao.impl.UserDaoImpl;
public class UserService {
	private UserDao dao;
	public UserService() {
		System.out.println("UserService 构造方法..."); 
	}
	public UserService(UserDao dao) {
		System.out.println("带参数的UserService");
		this.dao = dao;
	}	
	public void save() {
		dao.save();	
	}
	public void setDao(UserDao dao) {
		System.out.println("setUserDao...");
		this.dao = dao;
	}
}
 

输出:

XML注入类型

1.简单属性  2. 对象  3.集合

简单属性

文件目录:

代码:配置文件:applicationContext.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	
	<bean id="userDao" class="com.neuedu.dao.impl.UserDaoImpl"></bean>
	<bean id="userService" class="com.neuedu.service.UserService">
	<!-- set方法注入 -->
		<!-- <property name="dao" ref="userDao"></property> -->
		<!-- 构造方法注入 -->
		<constructor-arg ref="userDao"></constructor-arg>
	</bean>
	<bean id="person" class="com.neudeu.po.Person">
		<property name="name" value="zhang"></property>
		<property name="age" value="30"></property>
	</bean>
</beans>
 

Test.java

package com.neuedu.test;
import com.neudeu.po.Person;
import com.neuedu.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {

	public static void main(String[] args) {
		
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		//UserService us= (UserService)ac.getBean("userService");
		Person person = ac.getBean(Person.class);
		System.out.println(person);
	}
 
}

Person.java

package com.neudeu.po;

public class Person {
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
}

输出:

集合

文件目录:

代码:配置文件:applicationContext.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	
	<bean id="userDao" class="com.neuedu.dao.impl.UserDaoImpl"></bean>
	<bean id="userService" class="com.neuedu.service.UserService">
	<!-- set方法注入 -->
		<!-- <property name="dao" ref="userDao"></property> -->
		<!-- 构造方法注入 -->
		<constructor-arg ref="userDao"></constructor-arg>
	</bean>
	<bean id="FLL" class="com.neudeu.po.Car">
		<property name="brand" value="法拉利"></property>
		<property name="price" value="3000000"></property>
	</bean>
	
	<bean id="BW" class="com.neudeu.po.Car">
		<property name="brand" value="宝马"></property>
		<property name="price" value="300000"></property>
	</bean>
	
	<bean id="BYD" class="com.neudeu.po.Car">
		<property name="brand" value="比亚迪"></property>
		<property name="price" value="30000"></property>
	</bean>
	
	<bean id="person" class="com.neudeu.po.Person">
		<property name="name" value="zhang"></property>
		<property name="age" value="30"></property>
		<property name="cars">
			<list>
				<ref bean="FLL"/>
				<ref bean="BW"/>
				<ref bean="BYD"/>
			</list>
		</property>
	</bean>
</beans>
 

Person.java

package com.neudeu.po;

import java.util.List;

public class Person {
	private String name;
	private int age;
	
	private List<Car> cars;
	
	public List<Car> getCars() {
		return cars;
	}
	public void setCars(List<Car> cars) {
		this.cars = cars;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", cars=" + cars + "]";
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
}

Car.java

package com.neudeu.po;

public class Car {
	private String brand;
	private double price;
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Car [brand=" + brand + ", price=" + price + "]";
	}
	
	
}

输出:

代码:配置文件:applicationContext.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	
	<bean id="userDao" class="com.neuedu.dao.impl.UserDaoImpl"></bean>
	<bean id="userService" class="com.neuedu.service.UserService">
	<!-- set方法注入 -->
		<!-- <property name="dao" ref="userDao"></property> -->
		<!-- 构造方法注入 -->
		<!-- <constructor-arg ref="userDao"></constructor-arg> -->
		<property name="dao">
			<bean class="com.neuedu.dao.impl.UserDaoImpl"></bean>
		</property>
	</bean>
	<bean id="FLL" class="com.neudeu.po.Car">
		<property name="brand" value="法拉利"></property>
		<property name="price" value="3000000"></property>
	</bean>
	
	<bean id="BW" class="com.neudeu.po.Car">
		<property name="brand" value="宝马"></property>
		<property name="price" value="300000"></property>
	</bean>
	
	<bean id="BYD" class="com.neudeu.po.Car">
		<property name="brand" value="比亚迪"></property>
		<property name="price" value="30000"></property>
	</bean>
	
	<bean id="person" class="com.neudeu.po.Person">
		<property name="name" value="zhang"></property>
		<property name="age" value="30"></property>
		<property name="cars">
			<list>
				<bean class="com.neudeu.po.Car">
					<property name="brand" value="红旗"></property>
					<property name="price" value="300000"></property>
				</bean>
				<ref bean="FLL"/>
				<ref bean="BW"/>
				<ref bean="BYD"/>
			</list>
		</property>
	</bean>
</beans>
 

Test.java

package com.neuedu.test;
import com.neudeu.po.Person;
import com.neuedu.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {

	public static void main(String[] args) {
		
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		
	}
 
}

输出:

目录
相关文章
|
3月前
|
XML Java 数据格式
Spring从入门到入土(xml配置文件的基础使用方式)
本文详细介绍了Spring框架中XML配置文件的使用方法,包括读取配置文件、创建带参数的构造对象、使用工厂方法和静态方法创建对象、对象生命周期管理以及单例和多例模式的测试。
129 7
Spring从入门到入土(xml配置文件的基础使用方式)
|
8天前
|
XML Java 数据格式
【SpringFramework】Spring IoC-基于XML的实现
本文主要讲解SpringFramework中IoC和DI相关概念,及基于XML的实现方式。
97 69
|
3月前
|
Java Spring
在使用Spring的`@Value`注解注入属性值时,有一些特殊字符需要注意
【10月更文挑战第9天】在使用Spring的`@Value`注解注入属性值时,需注意一些特殊字符的正确处理方法,包括空格、引号、反斜杠、新行、制表符、逗号、大括号、$、百分号及其他特殊字符。通过适当包裹或转义,确保这些字符能被正确解析和注入。
183 3
|
3月前
|
Java 测试技术 程序员
为什么Spring不推荐@Autowired用于字段注入?
作为Java程序员,Spring框架在日常开发中使用频繁,其依赖注入机制带来了极大的便利。然而,尽管@Autowired注解简化了依赖注入,Spring官方却不推荐在字段上使用它。本文将探讨字段注入的现状及其存在的问题,如难以进行单元测试、违反单一职责原则及易引发NPE等,并介绍为何Spring推荐构造器注入,包括增强代码可读性和维护性、方便单元测试以及避免NPE等问题。通过示例代码展示如何将字段注入重构为构造器注入,提高代码质量。
119 1
|
12天前
|
XML Java 数据格式
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
|
26天前
|
Java Spring
一键注入 Spring 成员变量,顺序编程
介绍了一款针对Spring框架开发的插件,旨在解决开发中频繁滚动查找成员变量注入位置的问题。通过一键操作(如Ctrl+1),该插件可自动在类顶部添加`@Autowired`注解及其成员变量声明,同时保持光标位置不变,有效提升开发效率和代码编写流畅度。适用于IntelliJ IDEA 2023及以上版本。
一键注入 Spring 成员变量,顺序编程
|
17天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
53 6
|
2月前
|
Java 开发者 Spring
Spring高手之路24——事务类型及传播行为实战指南
本篇文章深入探讨了Spring中的事务管理,特别是事务传播行为(如REQUIRES_NEW和NESTED)的应用与区别。通过详实的示例和优化的时序图,全面解析如何在实际项目中使用这些高级事务控制技巧,以提升开发者的Spring事务管理能力。
61 1
Spring高手之路24——事务类型及传播行为实战指南
|
3月前
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
444 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
3月前
|
缓存 Java Spring
源码解读:Spring如何解决构造器注入的循环依赖?
本文详细探讨了Spring框架中的循环依赖问题,包括构造器注入和字段注入两种情况,并重点分析了构造器注入循环依赖的解决方案。文章通过具体示例展示了循环依赖的错误信息及常见场景,提出了三种解决方法:重构代码、使用字段依赖注入以及使用`@Lazy`注解。其中,`@Lazy`注解通过延迟初始化和动态代理机制有效解决了循环依赖问题。作者建议优先使用`@Lazy`注解,并提供了详细的源码解析和调试截图,帮助读者深入理解其实现机制。
77 1