一.IOC
官网bean的配置,建议去官网找,不要复制
<?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="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>
id就是你要new对象的名字
class是你要new对象的类
属性的注入采用property
resources下的beanx.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">
<!--id就是你要new对象的名字
class是你要new对象的类
-->
<bean id="user" class="com.kuang.pojo.User">
<!--属性注入-->
<property name="name" value="zhangsan"></property>
</bean>
</beans>
实体类
package com.kuang.pojo;
public class User {
private String name;
public User() {
System.out.println("无参构造调用了");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
仔细观察,发现实体类上有叶子图标,证明注入成功!
2.在实体类中添加一个方法
package com.kuang.pojo;
public class User {
private String name;
public User() {
System.out.println("无参构造调用了");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("name="+name);
}
}
测试
import com.kuang.pojo.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
@Test
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
User user = (User) context.getBean("user");
user.show();
System.out.println(user);
}
}
结果:
无参构造调用了
name=zhangsan
com.kuang.pojo.User@37374a5e
进行断点调试
注意,在getBean的时候就有user了
二.IOC创建对象的方式
1.通过无参构造方法来创建
1、User.java
public class User {
private String name;
public User() {
System.out.println("user无参构造方法");
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("name="+ name );
}
}
2.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
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.kuang.pojo.User">
<property name="name" value="kuangshen"/>
</bean>
</beans>
3.测试
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//在执行getBean的时候, user已经创建好了 , 通过无参构造
User user = (User) context.getBean("user");
//调用对象的方法 .
user.show();
}
结果可以发现,在调用show方法之前,User对象已经通过无参构造初始化了!
2.通过有参构造方法来创建
User.java
package com.kuang.pojo;
public class User {
private String name;
public User(String name) {
this.name=name;
System.out.println("有参构造调用了");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("name="+name);
}
}
2、beans.xml 有三种方式编写
<!-- 第一种根据index参数下标设置 -->
<bean id="user" class="com.kuang.pojo.User">
<constructor-arg index="0" value="zhangsan"></constructor-arg>
</bean>
<!-- 第二种根据参数名字设置 -->
<bean id="user" class="com.kuang.pojo.User">
<!-- name指参数名 -->
<constructor-arg name="name" value="zhangsan"></constructor-arg>
</bean>
第三种不建议使用,基本类型可以直接写类型,引用类型必须是全限定类名!
官网.xml
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg type="int" value="7500000"/>
<constructor-arg type="java.lang.String" value="42"/>
</bean>
<!-- 第三种根据参数类型设置 -->
<bean id="user" class="com.kuang.pojo.User">
<constructor-arg type="java.lang.String" value="zhangsan"></constructor-arg>
</bean>
3、测试
@Test
public void testT(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserT user = (UserT) context.getBean("userT");
user.show();
}
结论:在配置文件加载的时候。其中管理的对象都已经初始化了!
三.Spring配置
1.别名
alias 设置别名 , 为bean设置别名 , 可以设置多个别名
如果添加了别名,也可以通过别名获取
<!--设置别名:在获取Bean的时候可以使用别名获取-->
<alias name="user" alias="user2"></alias>
测试成功
@Test
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
User user = (User) context.getBean("user2");
user.show();
System.out.println(user);
}
2.Bean的配置
<!--
id: bean的唯一标识符,也就是相当于我们学过的对象名
class: bean对象所对应的全限定类名,包名+类名
name: 也是别名,name可以同时取多个别名,可以使用逗号 空格 分号来分隔
-->
<bean id="user" class="com.kuang.pojo.User" name="user2 user3 user4">
<property name="name" value="zhangsan"></property>
</bean>
3.import
一般用于团队开发,它可以将多个配置文件,导入合并为一个
项目只读取一个总的xml
假设,现在项目有三个人开发,开发不同的类,不同的类需要注册在不同的类中,利用import将所有人的beans.xml合并为一个
- 张三 beans.xml
- 李四 beans2.xml
- 王五 beans3.xml
applicationContext.xml
<import resource="beans.xml"></import>
<import resource="beans2.xml"></import>
<import resource="beans3.xml"></import>
使用的时候,直接使用总的配置就可以了!