Spring

本文介绍了Spring框架的基础入门,包括导入必要的依赖如Spring、Lombok和Junit,然后展示了如何配置bean,包括id、class和scope属性。接着,文章通过测试类展示了如何获取bean对象,包括默认构造方法和通过工厂类。最后,文章讨论了bean的作用域,如单例和原型,并给出了初始化和销毁方法的示例。
摘要由CSDN通过智能技术生成

一.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)
		*/
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值