Spring(2)bean注入--Set方法注入
2023-06-13 09:14:16 时间
Spring(2)bean注入–Set方法注入
Set 方法注入
新建一个空的 maven项目。
导入依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--这里是java 版本号-->
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<!--这里是方便版本控制-->
<spring.version>5.3.1</spring.version>
<lombok.version>1.18.20</lombok.version>
<junit.version>4.12</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
</dependencies>
工程项目结构
新建包 com.crush.pojo
新建Java类Student
@Data // set、get 方法
@AllArgsConstructor // 全参构造
@NoArgsConstructor // 无参构造
public class Student {
/**
* 学号
*/
private Long number;
/**
* 学生姓名
*/
private String name;
/**
* 所在学校
*/
private String school;
}
resource 下 beans.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">
<!--第一种方式 set 方式注入
1、有set方法才可以注入
2、默认是单例模式 singleton
-->
<bean id="student" class="com.crush.pojo.Student" scope="singleton">
<!--值可以跟在在标签后面 也可以 写在标签内部-->
<property name="number">
<value>1</value>
</property>
<property name="name" value="wyh"/>
<property name="school" value="hngy"/>
</bean>
<!--这个id 就是 applicationContext.getBean("【bean-id】", Student.class);
此处id 大多数时候命名规则就是 类名的第一个字母改为小写
class:Student
bean id一般就为: student
-->
<bean id="ssss" class="com.crush.pojo.Student" scope="singleton">
<!--值可以跟在在标签后面 也可以 写在标签内部-->
<property name="number">
<value>1</value>
</property>
<property name="name" value="wyh"/>
<property name="school" value="hngy"/>
</bean>
</beans>
写一个测试类
public class Test {
/**
* 通过 ClassPathXmlApplicationContext 获取 Spring 应用程序的 上下文 ApplicationContext
*/
@org.junit.Test
public void test(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
// 第一种方式 获取ioc 容器中的Student 强制类型转换
Student student = (Student) applicationContext.getBean("student");
// 第二种方式 直接在后面写明类的标签。
Student student1 = applicationContext.getBean("student", Student.class);
// student.setName("cccc"); 给其中一个修改 就会全部修改 可以自己打开测试下
System.out.println(student);
System.out.println(student1);
// 这里结果为true
// 解释:因为Spring 默认构造出来的对象 默认是单例的。 无论获取多少次 ,都是单例的。
System.out.println(student==student1);
}
/**
* 通过 FileSystemXmlApplicationContext 获取 Spring 应用程序的 上下文 ApplicationContext
* 还有第三种是 通过Web服务器实例化 ApplicationContext 容器
*/
@org.junit.Test
public void test2(){
//这里的路径 也可以 用绝对路径
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("src\\main\\resources\\beans.xml");
Student student = applicationContext.getBean("student", Student.class);
System.out.println(student);
}
}
小小思考
为什么 new ClassPathXmlApplicationContext(“beans.xml”); 要用ApplicationContext 来接收,而不用ClassPathXmlApplicationContext 接收呢?
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
解释:
按照面向接口编程的思想,声明变量应该是接口类型的,然后创建一个该接口的实现类的实例赋值给该变量。 ApplicationContext是接口,ClassPathXmlApplicationContext是它的一个实现类。所以你就看到了 ApplicationContext ac = new ClassPathXmlApplicationContext(…)
自言自语
带着自己的一些疑惑,来复习Spring 啦。
相关文章
- Spring中Model、ModelMap、ModelAndView理解和具体使用总结
- Spring Boot 中的异步调用[通俗易懂]
- Spring Cloud Gateway内存马注入
- Spring体系结构和组件的作用
- 2-Spring配置文件与依赖注入
- spring官方文档 中文_Spring软件
- Spring容器与依赖注入(DI)
- spring boot项目中handlerinterceptor autowired 为空解决办法
- 理论:第五章:Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的
- Spring Boot的开发环境搭建
- spring boot 自动部署方案详解架构师
- struts2与spring整合时提示无法注入bean的错误详解编程语言
- spring的AOP(五)—-Spring AOP 编程(AspectJ )详解编程语言
- 如何通俗的理解spring的控制反转、依赖注入、面向切面编程等等详解编程语言
- spring Boot(十九):使用Spring Boot Actuator监控应用详解编程语言
- Spring Boot(十四):spring boot整合shiro-登录认证和权限管理详解编程语言
- Spring Boot(十二):spring boot如何测试打包部署详解编程语言
- Spring queryForMap方法:查询结果以Map集合保存
- spring使用Spring整合Redis和Jedis构建高性能应用(redisjedis与)
- Spring框架下整合Redis的实现(spring整合redis)