一.Spring入门
1.导入依赖
<dependencies>
<!-- spring核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.20</version>
</dependency>
<!-- Lombok依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<!-- 测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
2.配置bean
- bean标签属性
-id 该id属性是标识单个 bean 定义的字符串。(不能重复)
-name 相当于别名-优先级在id之后
-class 该class属性定义 bean 的类型并使用完全限定的类名。
-scope 用于指定bean的作用范围--通常取值singleton(单例-默认),prototype(原型)
- 创建实体类
@Data
public class User {
private int userId;
private String userName;
private String password;
}
- 创建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
https://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
- 在applicationContext.xml文件中配置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">
<!--首先用到id和class属性 -->
<!---id 该id属性是标识单个 bean 定义的字符串。(不能重复)-->
<!---class 该class属性定义 bean 的类型并使用完全限定的类名。-->
<bean id="user" class="com.wcq.pojo.User">
</bean>
</beans>
3.测试
public class Test{
@Test
public void test () {
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) applicationContext.getBean("user");
System.out.println("user = " + user);
}
}
二.获取bean对象的方法
1.通过默认的构造方法
<?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和class属性 -->
<!---id 该id属性是标识单个 bean 定义的字符串。(不能重复)-->
<!---class 该class属性定义 bean 的类型并使用完全限定的类名。-->
<bean id="user" class="com.wcq.pojo.User">
</bean>
</beans>
2.通过工厂类反射创建
- 创建工厂类
public class UserFactory {
public User getUser() {
try {
return (User) Class.forName("com.wcq.pojo.User").newInstance();
} catch (Exception e) {
e.printStackTrace();
}
//return null;
//手动抛异常
throw new RuntimeException("创建User对象异常");
}
}
- 配置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="userFactoryBean" class="com.wcq.factory.UserFactory"/>
<bean id="user" factory-bean="userFactoryBean" factory-method="getUser"/>
</beans>
- 测试
public class Test{
@Test
public void test () {
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) applicationContext.getBean("user");
System.out.println("user = " + user);
}
}
使用static方法
public class UserFactory {
public static User getUser() {
try {
//反射
return (User) Class.forName("com.wcq.pojo.User").newInstance();
} catch (Exception e) {
e.printStackTrace();
}
//return null;
//手动抛异常
throw new RuntimeException("创建User对象异常");
}
}
配置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="userFactoryBean" class="com.wcq.factory.UserFactory"/>-->
<!-- <bean id="user" factory-bean="userFactoryBean" factory-method="getUser"/>-->
<!--使用static方法-->
<bean id="user" class="com.wcq.factory.UserFactory" factory-method="getUserStatic" ></bean>
</beans>
测试
public class Test{
@Test
public void test () {
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) applicationContext.getBean("user");
System.out.println("user = " + user);
}
}
三.bean对象的作用范围
- 涉及到的bean属性–scope
--scope
取值: 常用的就是单例的和原型
singleton:单例,每次创建一个实例(默认值)
prototype:原型,可以理解为多例,每次创建多个实例
request:作用于web应用的请求范围,仅适用于WebApplicationContext环境。
session:作用于web应用的会话范围,仅适用于WebApplicationContext环境。
global-session:作用于集群环境的会话范围(全局会话范围),当不是集群环境时,它就是session。
创建实体类
@Data
public class User {
private int userId;
private String userName;
private String password;
public void init() {
System.out.println("初始化方法");
}
public void destroy() {
System.out.println("销毁方法");
}
}
1.配置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">
<!---scope:常用的是单例(singleton-默认)和多例(prototype)-->
<bean id="user" class="com.wcq.pojo.User" scope="singleton" init-method="init" destroy-method="destroy">
</bean>
</beans>
- 测试
public class Test {
@Test
public void test () {
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) applicationContext.getBean("user");
System.out.println("user = " + user);
applicationContext.close();
/*输出结果
初始化方法
user = User(userId=0, userName=null, password=null)
销毁方法
*/
}
}
2.配置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">
<!---scope:常用的是单例(singleton-默认)和多例(prototype)-->
<bean id="user" class="com.wcq.pojo.User" scope="prototype" init-method="init" destroy-method="destroy">
</bean>
</beans>
- 测试
public class Test {
@Test
public void test () {
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) applicationContext.getBean("user");
System.out.println("user = " + user);
applicationContext.close();
/*输出结果
初始化方法
user = User(userId=0, userName=null, password=null)
*/
}
}