Spring学习笔记(三)
时间:2021-08-02
本文章向大家介绍Spring学习笔记(三),主要包括Spring学习笔记(三)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
接上篇
注入集合属性
主要为数组、List、Map集合
比较简单直接放例子
//Stu类
public class Stu {
//1 数组类型属性
private String[] courses;
//2 集合类型属性
private List<String> list;
//3 map类型属性
private Map<String,String> maps;
//4 set类型属性
private Set<String> sets;
public void setSets(Set<String> sets) {
this.sets = sets;
}
public void setCourses(String[] courses) {
this.courses = courses;
}
public void setList(List<String> list) {
this.list = list;
}
public void setMaps(Map<String, String> maps) {
this.maps = maps;
}
@Override
public String toString() {
return "Stu{" +
"courses=" + Arrays.toString(courses) +
", list=" + list +
", maps=" + maps +
", sets=" + sets +
'}';
}
}
xml配置文件
//xml配置文件
<bean id="stu" class="com.qy.spring5.ListTest.Stu">
<!--数组属性注入-->
<property name="courses">
<array>
<value>java课程</value>
<value>数据库课程</value>
</array>
</property>
<!--list属性注入-->
<property name="list">
<list>
<value>大王</value>
<value>小王</value>
</list>
</property>
<!--map属性注入-->
<property name="maps">
<map>
<entry key="JAVA" value="java"></entry>
<entry key="MYSQL" value="mysql"></entry>
</map>
</property>
<!--set属性注入-->
<property name="sets">
<set>
<value>set1</value>
<value>set2</value>
</set>
</property>
</bean>
//测试类
@Test
public void testOrder(){
// 1 加载Spring配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("com/day3/spring5/ListTest/bean.xml");
// 2 获取配置创建的对象
Stu stu = context.getBean("stu", Stu.class);
// 3 输出配置创建的对象
System.out.println(stu);
}
记清楚每个集合重要的组件,这一部分就可以掌握
外部Bean注入
//Stu类
public class Stu {
private List<Course> course;
public void setCourse(List<Course> course) {
this.course = course;
}
public void test(){
System.out.println(course);
}
}
//Course类
public class Course {
private String cname;
public void setCname(String cname) {
this.cname = cname;
}
@Override
public String toString() {
return "Course{" +
"cname='" + cname + '\'' +
'}';
}
}
xml配置文件
//xml配置文件
<bean id="stu" class="com.day3.spring5.ListTest.Stu">
<property name="course">
<list>
<ref bean="course1"></ref>
<ref bean="course2"></ref>
</list>
</property>
</bean>
<bean id="course1" class="com.day3.spring5.ListTest.Course">
<property name="cname" value="Sprng5框架"></property>
</bean>
<bean id="course2" class="com.qy.spring5.ListTest.Course">
<property name="cname" value="MyBatis框架"></property>
</bean>
IOC操作Bean管理(FactoryBean)
1、Spring有两种类型bean,一种普通bean,另一种工厂bean(FactoryBean)
2、普通bean:在配置文件中定义bean类型就是返回类型
3、工厂bean:在配置文件定义bean类型可以和返回类型不一样
接下来来讲讲实现步骤
第一步:创建工厂类,实现接口FactoryBean
//MyBean类
public class MyBean implements FactoryBean {
private String cname;
@Override
// 定义返回的类型为Course
public Course getObject() throws Exception {
Course course = new Course();
course.setCname("Java课程");
return course;
}
@Override
public Class<?> getObjectType() {
return null;
}
@Override
public boolean isSingleton() {
return false;
}
}
//Course类
public class Course {
private String cname;
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
}
xml配置文件
<bean id="myBean" class="com.day4.spring5.MyBeanTest.MyBean"></bean>
测试类
//测试类
//会发现获取myBean的返回值已经变为了Course
@Test
public void test(){
//1 加载xml配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("com/day4/spring5/MyBeanTest/bean.xml");
//2 获取配置文件创建的对象
Course course = context.getBean("myBean", Course.class);
//3 输出获得的对象
System.out.println(course.getCname());
}
最后我们来说说作用域
在Spring中,默认情况下,bean都为单实例对象,可通过设置bean的属性scope设置多实例还是单实例。
scope属性值:
- 第一个值,默认值,singleton,表示单实例对象
- 第二个值,prototype,表示多实例对象
//测试类
@Test
public void testBook(){
// 1 加载Spring配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("com/qy/spring5/bean1.xml");
// 2 获取配置创建的对象
Book book1 = context.getBean("book",Book.class);
Book book2 = context.getBean("book",Book.class);
// 3 输出配置创建的对象的属性
System.out.println(book1);
System.out.println(book2);
}
//xml配置文件
<bean id="book" class="com.day4.spring5.Book" scope="prototype"></bean>
//测试类输出
com.qy.spring5.Book@365185bd
com.qy.spring5.Book@18bf3d14
// 发现创建的对象地址不同,说明创建了多实例对象
原文地址:https://www.cnblogs.com/Emuaer/p/15090903.html
- Tomcat启动慢解决方法(本人CentOS7.4系统)
- Nginx软件部署配置过程
- iptables网络安全服务详细使用
- 未来哪个行业能赚钱,看百度、阿里、腾讯投资的企业你就知道了!
- Augmate公司应用分布式账本技术,将IOTA整合为物联网设备管理平台
- 一域名一年前六位数终端易主 是为了......
- 黑客通过Facebook Messenger传播加密货币挖掘恶意软件
- linq to sql的多条件动态查询(下)
- iptables网络安全服务详细使用
- iptables网络安全服务详细使用
- linq to sql的多条件动态查询(上)
- 极简区块链手册:什么是区块链?什么是比特币?
- Nginx+keepalived实现高可用
- 来一波Linux中查看cpu、磁盘、内存、网络的命令
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 用opencv给图片换背景色的示例代码
- 解决Keras 自定义层时遇到版本的问题
- Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
- Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
- python实现PDF中表格转化为Excel的方法
- php实现算术验证码功能
- 基于matplotlib中ion()和ioff()的使用详解
- Laravel5.7框架安装与使用学习笔记图文详解
- Python基于httpx模块实现发送请求
- Python Tkinter图形工具使用方法及实例解析
- PHP实现的简单留言板功能示例【基于thinkPHP框架】
- Python SMTP配置参数并发送邮件
- Python如何实现自带HTTP文件传输服务
- 在keras中实现查看其训练loss值
- keras实现VGG16方式(预测一张图片)