IOC创建对象方式
- 不用Set
- 构造器注入
1.无参构造(默认)
- 必须创建无参构造,我们用的就是无参构造
1.创建一个实体类
public class Student {
private String name;
public Student() {
System.out.println("Student的无参构造");
}
public void setName(String name) {
this.name = name;
}
public void getUser(){
System.out.println("name:"+name);
}
}
2.配置bean.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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Hello hello = new Hello();
类型 变量名 = new 类型
id class
id:相当于变量名
class:需要new的类型
name:就是set方法里面的this.name
value:是具体的值 我们手动赋值的 !-->
<bean id="hello" class="com.ws.pojo.Student">
<property name="name" value="Spring"/>
</bean>
</beans>
3.测试
public static void main(String[] args) {
//获取Spring的上下文对象 对应的是beans.xml里面的内容
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//我们的对象都在Spring中的管理了 我们要使用 直接去里面取出来就可以
//id就是变量名 所以我们要取出来的就是变量名
Student name = (Student)context.getBean("hello");
name.getUser();
2.有参构造
1.下标赋值
- 也是一个值才行
1.创建实体类
public class Student {
private String name;
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void getUser(){
System.out.println("name:"+name);
}
}
2.beans.xml配置
<bean id="hello" class="com.ws.pojo.Student">
<constructor-arg index="0" value="Spring"/>
</bean>
3.测试
public class Test {
public static void main(String[] args) {
//获取Spring的上下文对象 对应的是beans.xml里面的内容
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//我们的对象都在Spring中的管理了 我们要使用 直接去里面取出来就可以
//id就是变量名 所以我们要取出来的就是变量名
Student name = (Student)context.getBean("hello");
name.getUser();
2.类型赋值
- 不推荐使用 如果创建的是两个不同类型的值就不行了
1.beans.xml配置
<bean id="hello" class="com.ws.pojo.Student">
<constructor-arg type="java.lang.String" value="Spring"/>
</bean>
2.测试
public class Test {
public static void main(String[] args) {
//获取Spring的上下文对象 对应的是beans.xml里面的内容
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//我们的对象都在Spring中的管理了 我们要使用 直接去里面取出来就可以
//id就是变量名 所以我们要取出来的就是变量名
Student name = (Student)context.getBean("hello");
name.getUser();
3.值 赋值
为了更明白 我把name的值换成了hh
1.实体类
public class Student {
private String name;
// public Student() {
// System.out.println("Student的无参构造");
// }
public Student(String hh) {
this.name = hh;
}
public String getName() {
return name;
}
public void setName(String hh) {
this.name = hh;
}
public void getUser(){
System.out.println("hh:"+name);
}
}
2.beans.xml
<!-- 名字赋值-->
<bean id="hello" class="com.ws.pojo.Student">
<constructor-arg name="hh" value="Spring"/>
</bean>
3.测试
public class Test {
public static void main(String[] args) {
//获取Spring的上下文对象 对应的是beans.xml里面的内容
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//我们的对象都在Spring中的管理了 我们要使用 直接去里面取出来就可以
//id就是变量名 所以我们要取出来的就是变量名
Student name = (Student)context.getBean("hello");
name.getUser();
3.来源
1.狂神视频学习
2.如果错误请指出改正