2.2.1,搭建子模块spring6-ioc-xml
在父工程目录下新建一个子工程,
并将所需的 spring-context , junit,log4j2 等相关依赖引入父工程的pom文件
遇到的问题: maven侧边栏父工程报错红色波浪线,相关子工程也报错
解决: 检查maven是否开启离线模式,删除相关依赖,重新导入或更新依赖版本
2.2.2,实验一 :获取bean
方式一:根据id获取
由于id属性指定了bean的唯一标识,所以根据bean标签属性的id属性可以精确获取到一个组件对象
public class TestUser {
public static void main(String[] args) {
ApplicationContext context=
new ClassPathXmlApplicationContext("bean.xml");
//根据id获取bean
User user = (User) context.getBean("user");
System.out.printf("根据id获取bean:"+user);
}
}
方式二:根据类型获取bean
类.class
//根据类型获取bean
User user2 = context.getBean(User.class);
System.out.print("根据类型获取bean:"+user2);
方式三:根据id和类型获取bean
id和类型组合
//根据id和类型获取bean
User user3 = context.getBean("user",User.class);
System.out.print("根据类型获取bean:"+user3);
注意: 当根据类型获取bean时,要求IOC容器中指定类型的bean有且只能有一个
如果IOC容器一个配置了两个
那么根据类型获取时就会抛出异常 !
ioc容器期望是单实例对象。
扩展:
如果组件实现了接口,根据接口类型可以获取bean吗?
可以,前提是bean唯一
如果一个接口有多个实现类,这些实现类都配置了bean,可以根据接口类型获取bean吗?
不行,因为bean不唯一!
结论
1.类有属性,创建对象过程中,向属性设置值
第一种方式:基于set方法完成
第二种方式:基于构造器完成
*set方法注入
第一步:创建类,定义属性,生产属性set方法
第二步:在spring配置文件配置
bean-di.xml
<bean id="book" class="com.atguigu.spring.ioc.di.Book">
<property name="bname" value="前端开发"></property>
<property name="author" value="尚硅谷"></property>
</bean>
book类
public class Book {
private String bname;
private String author;
public String getBname() {
return bname;
}
@Override
public String toString() {
return "Book{" +
"bname='" + bname + ''' +
", author='" + author + ''' +
'}';
}
public void setBname(String bname) {
this.bname = bname;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
测试类:
public class TestBook {
@Test
public void testSeetter(){
ApplicationContext context=
new ClassPathXmlApplicationContext("bean-di.xml");
Book book=context.getBean("book",Book.class);
System.out.println(book);
}
}
输出:
"C:\Program Files\Java\jdk-17\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2023.1\lib\idea_rt.jar=55090:C:\Program Files\JetBrains\IntelliJ IDEA 2023.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Users\31074.m2\repository\org\junit\platform\junit-platform-launcher\1.6.3\junit-platform-launcher-1.6.3.jar;C:\Users\31074.m2\repository\org\junit\platform\junit-platform-engine\1.6.3\junit-platform-engine-1.6.3.jar;C:\Users\31074.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.6.3\junit-jupiter-engine-5.6.3.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2023.1\lib\idea_rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2023.1\plugins\junit\lib\junit5-rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2023.1\plugins\junit\lib\junit-rt.jar;D:\JavaProject\spring6\spring6-ioc-xml\target\classes;C:\Users\31074.m2\repository\org\springframework\spring-context\6.0.2\spring-context-6.0.2.jar;C:\Users\31074.m2\repository\org\springframework\spring-aop\6.0.2\spring-aop-6.0.2.jar;C:\Users\31074.m2\repository\org\springframework\spring-beans\6.0.2\spring-beans-6.0.2.jar;C:\Users\31074.m2\repository\org\springframework\spring-core\6.0.2\spring-core-6.0.2.jar;C:\Users\31074.m2\repository\org\springframework\spring-jcl\6.0.2\spring-jcl-6.0.2.jar;C:\Users\31074.m2\repository\org\springframework\spring-expression\6.0.2\spring-expression-6.0.2.jar;C:\Users\31074.m2\repository\org\junit\jupiter\junit-jupiter-api\5.6.3\junit-jupiter-api-5.6.3.jar;C:\Users\31074.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\31074.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\31074.m2\repository\org\junit\platform\junit-platform-commons\1.6.3\junit-platform-commons-1.6.3.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 com.atguigu.spring.ioc.di.TestBook,testSeetter
Book{bname='前端开发', author='尚硅谷'}
Process finished with exit code 0
*构造器方法注入
第一步:创建类,定义属性,生成有参数构造方法
第二步:进行配置