IOC创建对象方式
大约 2 分钟Spring全家桶Spring入门
无参构造默认实现
pojo实体类中必须要有无参构造方法。否则,程序会报错。
User.java
package com.kuang.pojo;
/**
* @author Administrator
*/
public class User {
private String name;
public User(String name){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("name=" + name);
}
}
没有无参构造方法,使用Spring容器会报错。
Caused by: java.lang.NoSuchMethodException: com.kuang.pojo.User.<init>()
有参构造
下标赋值
<?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">
<!--(1)下标赋值!-->
<bean id="user" class="com.kuang.pojo.User">
<constructor-arg index="0" value="狂神说Java"/>
</bean>
</beans>
结果:
name=狂神说Java
类型赋值
<?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">
<!-- <!–(1)下标赋值!–>-->
<!-- <bean id="user" class="com.kuang.pojo.User">-->
<!-- <constructor-arg index="0" value="狂神说Java"/>-->
<!-- </bean>-->
<!--(2)通过类型创建:不建议使用-->
<bean id="user" class="com.kuang.pojo.User">
<constructor-arg type="java.lang.String" value="张三"/>
</bean>
</beans>
结果:
name=张三
参数名设置
<?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">
<!-- <!–(1)下标赋值!–>-->
<!-- <bean id="user" class="com.kuang.pojo.User">-->
<!-- <constructor-arg index="0" value="狂神说Java"/>-->
<!-- </bean>-->
<!--(2)通过类型创建:不建议使用-->
<!-- <bean id="user" class="com.kuang.pojo.User">-->
<!-- <constructor-arg type="java.lang.String" value="张三"/>-->
<!-- </bean>-->
<!--(3)直接通过参数名设置-->
<bean id="user" class="com.kuang.pojo.User">
<constructor-arg name="name" value="狂神"/>
</bean>
</beans>
结果:
name=狂神
好玩的东西
新建一个无参构造方法类,并在配置文件添加bean。
UserT.java
package com.kuang.pojo;
/**
* @author Administrator
*/
public class UserT {
private String name;
public UserT(){
System.out.println("UserT被创建了!");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("name=" + name);
}
}
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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- <!–(1)下标赋值!–>-->
<!-- <bean id="user" class="com.kuang.pojo.User">-->
<!-- <constructor-arg index="0" value="狂神说Java"/>-->
<!-- </bean>-->
<!--(2)通过类型创建:不建议使用-->
<!-- <bean id="user" class="com.kuang.pojo.User">-->
<!-- <constructor-arg type="java.lang.String" value="张三"/>-->
<!-- </bean>-->
<!--(3)直接通过参数名设置-->
<bean id="user" class="com.kuang.pojo.User">
<constructor-arg name="name" value="狂神"/>
</bean>
<bean id="userT" class="com.kuang.pojo.UserT">
</bean>
</beans>
MyTest.java
import com.kuang.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
User bean = (User) context.getBean("user");
bean.show();
}
}
结果:
UserT被创建了!
name=狂神
由此可以发现:Spring容器在我们配置完bean,bean被注册之后,就已经创建完了对象。我们通过getBean去Spring容器中获取对象。
import com.kuang.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
User bean = (User) context.getBean("user");
User bean1 = (User) context.getBean("user");
bean.show();
System.out.println(bean == bean);
}
}
结果:
UserT被创建了!
name=狂神
true
内存中只有一份实例。
总结:在配置文件加载的时候,容器中管理的对象就已经初始化了!