}
Student
package com.kevin.spring.demo2.entity;
/**
- 学生
*/
public class Student extends Person{
/**
* 身高
*/
public int height;
/**
* 有参构造函数
* @param name
* @param height
*/
public Student(String name,int height) {
this.name = name;
this.height = height;
}
@Override
public String toString() {
return "Student{" +
"height=" + height +
", name='" + name + '\'' +
'}';
}
}
student.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="kevin" class="com.kevin.spring.demo2.entity.Student">
<constructor-arg name="name" value="kevin"></constructor-arg>
<constructor-arg name="height" value="170"></constructor-arg>
</bean>
<!--使用索引指定参数-->
<bean id="maomao" class="com.kevin.spring.demo2.entity.Student">
<constructor-arg index="0" value="maomao"></constructor-arg>
<constructor-arg index="1" value="100"></constructor-arg>
</bean>
测试类
package com.kevin.spring.demo2.test;
import com.kevin.spring.demo2.entity.Person;
import com.kevin.spring.demo2.entity.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("student.xml");
Person kevin = ctx.getBean("kevin", Student.class);
Person maomao = ctx.getBean("maomao", Student.class);
System.out.println(maomao);
System.out.println(kevin);
}
}
输出
信息: Loading XML bean definitions from class path resource [student.xml]
Student{height=100, name=‘maomao’}
Student{height=170, name=‘kevin’}
通过属性赋值
Animal
package com.kevin.spring.demo3.entity;
/**
- 动物
*/
public class Animal {
/**
* 动物名称
*/
private String name;
public Animal() {
}
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Animal{" +
"name='" + name + '\'' +
'}';
}
}
animal.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"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dog" class="com.kevin.spring.demo3.entity.Animal">
<property name="name" value="dog"></property>
</bean>
<bean id="cat" class="com.kevin.spring.demo3.entity.Animal" p:name="cat"></bean>
测试
package com.kevin.spring.demo3.test;
import com.kevin.spring.demo3.entity.Animal;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
- 测试类
*/
public class Test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("animal.xml");
Animal dog = ctx.getBean("dog",Animal.class);
Animal cat = ctx.getBean("cat",Animal.class);
System.out.println(cat);
System.out.println(dog);
}
}
输出结果
信息: Loading XML bean definitions from class path resource [animal.xml]
Animal{name=‘cat’}
Animal{name=‘dog’}
对象引用
Tyre
package com.kevin.spring.demo4.entity;
/**
-
轮胎
-
@author: kevin
-
@Date: 2018/12/8
*/
public class Tyre {
private String name;
public Tyre(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Tyre{" +
"name='" + name + '\'' +
'}';
}
}
Car
package com.kevin.spring.demo4.entity;
/**
- 车
*/
public class Car {
private String name;
private Tyre tyre;
public Car(String name, Tyre tyre) {
this.name = name;
this.tyre = tyre;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Tyre getTyre() {
return tyre;
}
public void setTyre(Tyre tyre) {
this.tyre = tyre;
}
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", tyre=" + tyre +
'}';
}
}
测试
package com.kevin.spring.demo4.test;
import com.kevin.spring.demo4.entity.Car;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("car.xml");
Car bike = ctx.getBean("bike", Car.class);
System.out.println(bike);
}
}
输出结果
信息: Loading XML bean definitions from class path resource [car.xml]
Car{name=‘bike’, tyre=Tyre{name=‘自行车轮胎’}}
对象作用域
> 在大多数情况下,单例bean是很理想的方案。初始化和垃圾回收对象实例所带来的的成本只留给一些小规模任务,在这些任务中,让对象保持无状态并且在应用中反复重用这些对象可能并不合理。在这种情况下,将class声明为单例的bean会被污染,稍后重用的时候会出现意想不到的问题。 -《spring实战》
Spring定义了多种作用域,可以基于这些作用域创建bean,包括:
| 作用域 | 描述 |
| --- | --- |
| 单例(Singleton) | 在整个应用中,只创建bean的一个实例 |
| 原型(Prototype) | 每次注入或者通过spring应用上下文获取的时候,都会创建一个新的bean实例 |
| 会话(Session) | 在web应用中,为每个会话创建一个bean实例 |
| 请求(Request) | 在web应用中,为每个请求创建一个bean实例 |
1、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"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dog" class="com.kevin.spring.demo3.entity.Animal">
<property name="name" value="dog"></property>
</bean>
<bean id="cat" class="com.kevin.spring.demo3.entity.Animal" p:name="cat"></bean>
测试
package com.kevin.spring.demo3.test;
import com.kevin.spring.demo3.entity.Animal;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
- 测试类
*/
public class Test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("animal.xml");
Animal dog1 = ctx.getBean("dog",Animal.class);
Animal dog2 = ctx.getBean("dog",Animal.class);
System.out.println(dog1 == dog2);
}
}
输出结果
true
这样验证了从容器中取回的对象默认是单例的。
2、设置成Prototype
<?xml version="1.0" encoding="UTF-8"?>
最后
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
再免费分享一波我的Java专题面试真题+视频学习详解+Java进阶学习书籍
lic static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("animal.xml");
Animal dog1 = ctx.getBean("dog",Animal.class);
Animal dog2 = ctx.getBean("dog",Animal.class);
System.out.println(dog1 == dog2);
}
}
输出结果
true
这样验证了从容器中取回的对象默认是单例的。
2、设置成Prototype
<?xml version="1.0" encoding="UTF-8"?>
最后
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
[外链图片转存中…(img-kNH2h7Sg-1628081441658)]
[外链图片转存中…(img-0P46nF8E-1628081441660)]
再免费分享一波我的Java专题面试真题+视频学习详解+Java进阶学习书籍
其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣,