初识 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");
		
	}
 
}

输出:

目录
相关文章
|
2月前
|
XML Java 数据格式
Spring从入门到入土(xml配置文件的基础使用方式)
本文详细介绍了Spring框架中XML配置文件的使用方法,包括读取配置文件、创建带参数的构造对象、使用工厂方法和静态方法创建对象、对象生命周期管理以及单例和多例模式的测试。
119 7
Spring从入门到入土(xml配置文件的基础使用方式)
|
2月前
|
Java Spring
在使用Spring的`@Value`注解注入属性值时,有一些特殊字符需要注意
【10月更文挑战第9天】在使用Spring的`@Value`注解注入属性值时,需注意一些特殊字符的正确处理方法,包括空格、引号、反斜杠、新行、制表符、逗号、大括号、$、百分号及其他特殊字符。通过适当包裹或转义,确保这些字符能被正确解析和注入。
129 3
|
2月前
|
Java 测试技术 程序员
为什么Spring不推荐@Autowired用于字段注入?
作为Java程序员,Spring框架在日常开发中使用频繁,其依赖注入机制带来了极大的便利。然而,尽管@Autowired注解简化了依赖注入,Spring官方却不推荐在字段上使用它。本文将探讨字段注入的现状及其存在的问题,如难以进行单元测试、违反单一职责原则及易引发NPE等,并介绍为何Spring推荐构造器注入,包括增强代码可读性和维护性、方便单元测试以及避免NPE等问题。通过示例代码展示如何将字段注入重构为构造器注入,提高代码质量。
107 1
|
10天前
|
Java Spring
一键注入 Spring 成员变量,顺序编程
介绍了一款针对Spring框架开发的插件,旨在解决开发中频繁滚动查找成员变量注入位置的问题。通过一键操作(如Ctrl+1),该插件可自动在类顶部添加`@Autowired`注解及其成员变量声明,同时保持光标位置不变,有效提升开发效率和代码编写流畅度。适用于IntelliJ IDEA 2023及以上版本。
一键注入 Spring 成员变量,顺序编程
|
1月前
|
Java 开发者 Spring
Spring高手之路24——事务类型及传播行为实战指南
本篇文章深入探讨了Spring中的事务管理,特别是事务传播行为(如REQUIRES_NEW和NESTED)的应用与区别。通过详实的示例和优化的时序图,全面解析如何在实际项目中使用这些高级事务控制技巧,以提升开发者的Spring事务管理能力。
52 1
Spring高手之路24——事务类型及传播行为实战指南
|
2月前
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
265 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
3月前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
245 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
3月前
|
XML Java 数据格式
spring复习02,xml配置管理bean
详细讲解了Spring框架中基于XML配置文件管理bean的各种方式,包括获取bean、依赖注入、特殊值处理、属性赋值、集合类型处理、p命名空间、bean作用域及生命周期和自动装配。
spring复习02,xml配置管理bean
|
2月前
|
缓存 Java Spring
源码解读:Spring如何解决构造器注入的循环依赖?
本文详细探讨了Spring框架中的循环依赖问题,包括构造器注入和字段注入两种情况,并重点分析了构造器注入循环依赖的解决方案。文章通过具体示例展示了循环依赖的错误信息及常见场景,提出了三种解决方法:重构代码、使用字段依赖注入以及使用`@Lazy`注解。其中,`@Lazy`注解通过延迟初始化和动态代理机制有效解决了循环依赖问题。作者建议优先使用`@Lazy`注解,并提供了详细的源码解析和调试截图,帮助读者深入理解其实现机制。
69 1
|
2月前
|
安全 算法 Java
强大!基于Spring Boot 3.3 六种策略识别上传文件类型
【10月更文挑战第1天】在Web开发中,文件上传是一个常见的功能需求。然而,如何确保上传的文件类型符合预期,防止恶意文件入侵,是开发者必须面对的挑战。本文将围绕“基于Spring Boot 3.3 六种策略识别上传文件类型”这一主题,分享一些工作学习中的技术干货,帮助大家提升文件上传的安全性和效率。
76 0
下一篇
DataWorks