开发步骤:
- 导入坐标
- 创建Bean(dao和dao的实现)
- 创建applicationContext.xml
- 再配置文件中进行配置
- 创建ApplicationContext对象getBean;
Spring配置文件
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
Hello.java
package com.zyz.pojo;
public class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show() {
System.out.println("Hello," + name);
}
}
applicationContext.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就是java对象 , 由Spring创建和管理-->
<bean id="hello" class="com.zyz.pojo.Hello" scope="singleton">
<property name="name" value="Spring"/>
</bean>
</beans>
HelloTest.java
public class HelloTest {
@Test
public void test(){
//解析beans.xml文件 , 生成管理相应的Bean对象
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//getBean : 参数即为spring配置文件中bean的id .
Hello hello = (Hello) context.getBean("hello");
hello.show();
}
}
Bean标签的范围
scope:指对象的作用范围取值如下
- singleton:单例的(默认就是这范围);
- prototype:多列的
- request:WEB项目中,Spring创建一个Bean对象,将对象存入到request域中
<bean id="hello" class="com.zyz.pojo.Hello" scope="singleton">
@Test
//测试scope属性
public void test1(){
//解析beans.xml文件 , 生成管理相应的Bean对象的容器
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//getBean : 参数即为spring配置文件中bean的id .
Hello hello = (Hello) context.getBean("hello");
Hello hello2 = (Hello) context.getBean("hello");
System.out.println(hello);
System.out.println(hello2);
}
//运行结果
com.zyz.pojo.Hello@2a742aa2
com.zyz.pojo.Hello@2a742aa2
因为scope属性设置为了singleton,所以只能创建一个实例,即使多次创建也只是指向同一个实例,单例模式在创建ioc容器完成后就会实例化对象,可以配置延迟加载,那么getBean()的时候才创建实例
<bean id="student" class="com.zyz.bean.Student" lazy-init="true"> <property name="name" value="你好"/> </bean>
当属性改为prototype则可创建多个,
getBean()
时才创建;注意,这里默认都是使用类的无参构造器取创建实例
可以通过打断点debug发现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wYZrVHn6-1630311917125)(C:\Users\ZYZ\AppData\Roaming\Typora\typora-user-images\image-20210728094628005.png)]
Bean实例化的三种方式
- 无参构造器方法的实例化(重点)*
- 工厂静态方法实例化
public class StaticFactory {
public static UserDao getUserDao(){
return new UserDaoImpl();
}
}
<!-- 调用静态工厂取获取对象-->
<bean id="userDao" class="com.zyz.factory.StaticFactory" factory-method="getUserDao">
</bean>
- 工厂实例化方法实例化