IOC创建对象的方式和Spring配置
一、IOC创建对象的方式
1.使用无参构造创建对象,默认实现
例子:
pojo --> User1
package com.shy.pojo;
public class User1 {
private String name;
public User1(){
System.out.println("user1被创建了");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"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">
<bean id="user1" class="com.shy.pojo.User1" name="user12 u2,u81">
<property name="name" value="Shy123"/>
</bean>
</beans>
测试:
import com.shy.pojo.User;
import com.shy.pojo.User1;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//在执行getBean的时候, user已经创建好了 , 通过无参构造
User1 user = (User1) context.getBean("user1");
//调用对象的方法
user.show();
}
}
在调用show方法之前,User对象已经通过无参构造初始化了
2.假设要使用有参构造创建对象
pojo --> User
package com.shy.pojo;
public class User {
private String name;
public User(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
public void show(){
System.out.println("name="+name);
}
}
beans.xml有三种方式编写
<!--第一种根据index参数下标设置-->
<bean id="user" class="com.shy.pojo.User">
<!-- index指构造方法 , 下标从0开始 -->
<constructor-arg index="0" value="shy"/>
</bean>
<!-- 第二种根据参数名字设置 -->
<bean id="user" class="com.shy.pojo.User">
<!-- name指参数名 -->
<constructor-arg name="name" value="shy"/>
</bean>
<!-- 第三种根据参数类型设置 -->
<bean id="user" class="com.shy.pojo.User">
<constructor-arg type="java.lang.String" value="shy"/>
</bean>
测试:
import com.shy.pojo.User;
import com.shy.pojo.User1;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
User1 user = (User1) context.getBean("user12");
user.show();
}
}
在配置文件被加载时,容器中的管理的对象就已经初始化了。
二、spring配置
6.1别名
<alias name="user" alias="shyqwer"/>
6.2Bean的配置
<!--bean就是java对象,由Spring创建和管理-->
<!--
id 是bean的标识符,要唯一,如果没有配置id,name就是默认标识符
如果配置id,又配置了name,那么name是别名
name可以设置多个别名,可以用逗号,分号,空格隔开
如果不配置id和name,可以根据applicationContext.getBean(.class)获取对象;
class是bean的全限定名=包名+类名
-->
<bean id="user1" class="com.shy.pojo.User1" name="user12 u2,u81">
<property name="name" value="Shy123"/>
</bean>
6.3import
一般用于团队开发使用,可以把多个bean合并到一个文件中
<import resource="{path}/beans.xml"/>