2.Spring创建与使用

本文介绍了如何在Spring框架中创建、存储和使用Bean对象,包括Maven项目配置、XML配置文件的使用、类注解存储Bean的命名规则,以及如何通过ApplicationContext和BeanFactory获取Bean对象。
摘要由CSDN通过智能技术生成

Spring 就是⼀个包含了众多⼯具⽅法的 IoC 容器。既然是容器那么

它就具备两个最基本的功能:

将对象存储到容器(Spring)中;

从容器中将对象取出来。

在Java语言中,对象也叫做Bean, 所以后面的对象以Bean相称。

一、Spring创建与使用

接下来使⽤ Maven ⽅式来创建⼀个 Spring 项⽬,创建 Spring 项⽬和 Servlet 类似,总共分为以下 3步:

1.创建⼀个普通 Maven 项⽬。

2.添加 Spring 框架⽀持(spring-context、spring-beans)。

在pom.xml里添加Spring框架的支持

添加的框架有 spring-context:spring 上下⽂,还有 spring-beans:管理对象的模块

  3.添加启动类。

最后在创建好的java项目文件夹下创建一个启动类,包含main方法

二、存储Bean对象

存储 Bean 分为以下 2 步:

1. 存储 Bean 之前,先得有 Bean 才⾏,因此先要创建⼀个 Bean。

2. 将创建的 Bean 注册到 Spring 容器中。具体实现如下

2.1创建Bean

Bean就是一个java语言中普通对象

public class User { public String Hello(String name){ return name+"hello"; } }

2.2将Bean注册到容器

第一个:方法注解实现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" xmlns:content="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> 
</beans>

然后注册User对象到Spring中就可,具体是在<beans>中添加配置:

<beans> <bean id="User" class="com.demo.User"> </beans>

第二种方法:通过方法注解实现Bean对象的存储

@Service //这个就是方法注解 
public class UserService { 
public void sayHi(){ 
System.out.println("Hi, UserService");}
}

注:使用注解存储Bean和使用XML存储Bean是可以混用的

三、类注解存储Bean的命名问题:(默认命名规则):

结论:如果首字母大写,第二个字母小写,那么Bean的名称就是类名小写

如果不满足首字母大写,第二个字母小写的话,那么Bean名称就是原类名

什么是原类名?

让我们看看Bean生成名称源代码:

命名规则:首字母和第二个字母大写返回原类名,否则就是首字母小写。

四、获取使用Bean对象

获取并使⽤ Bean 对象,分为以下 3 步:

1. 得到 Spring 上下⽂对象,因为对象都交给 Spring 管理了,所以获取对象要从 Spring 中获取,那么就得先得到 Spring 的上下⽂。

2. 通过 Spring 上下⽂,获取某⼀个指定的 Bean 对象。

3. 使⽤ Bean 对象。

4.1创建Spring上下文

Spring 上下⽂对象可使⽤ ApplicationContext,实现代码如下:

//得到Spring上下文对象,创建的时候需要配置Spring配置信息
 ApplicationContext context= 
    new ClassPathXmlApplicationContext("spring-config.xml");

除了ApplicationContext,我们还可以使用BeanFactory来作为Spring的上下文,如以下代码:

BeanFactory beanFactory=
    new XmlBeanFactory( new ClassPathResource ("spring-config.xml") );

ApplicationContext 和 BeanFactory 效果是⼀样的ApplicationContext 属于 BeanFactory 的⼦类,它们的区别如下

ApplicationContext VS BeanFactory(重点)

1.继承关系与功能方面:

Spring容器有两个顶级的接口 :BeanFactory 和 ApplicationContext

其中 BeanFactory提供了基础的访问容器的能力,而ApplicationContext属于BeanFactory的子类,它除了继承了BeanFactory的全部功能以外,还有自己的独特特性,添加了国际化的支持,资源访问支持,以及事件传播等方面的支持。

2.性能方面:

ApplicationContext 是一次性加载并初始化所有的Bean对象,而BeanFactory是需要哪个才会去加载哪个,因此更加轻量化。

注:ClassPathXmlApplicationContext 属于 ApplicationContext 的⼦类,拥有ApplicationContext 的所有功能,是通过 xml 的配置来获取所有的 Bean 容器的。

4.2获取指定的Bean对象

// 1.得到 Spring 上下⽂对象 
ApplicationContext context = 
new ClassPathXmlApplicationContext("spring-config.xml");
 // 2.加载某个 bean 
User user = (User) context.getBean("user");

4.2.1注意事项

Bean的id必须一一对应

4.2.2 getBean ⽅法的更多⽤法

getBean() ⽅法有很多种重载⽅法,我们也可以使⽤其他⽅式来获取 Bean 对象,⽐如以下这两种:

根据类型获取 Bean:
UserController user=context.getBean(UserController.class);
名称+类型获取Bean:
UserController user=context.getBean("user",UserController.class);

区别:当有一个类型被重复注册到spring-config.xml中时,只能使用根据名称获取:

比如以下程序:

以上场景导致程序报错:如下图所示

解决方案:

1.将属性名字和Bean名字对应上

2.@Autowired配合@Qualifier一起使用

3.3 使⽤ Bean

public class APP2 {
    public static void main(String[] args) {
        //1.加载配置(获取所有的注册Bean信息)
        BeanFactory context=new XmlBeanFactory(
                new ClassPathResource("spring-config.xml"));
        //2.得到Bean[依赖查找-》IOC的一种实现】
        UserService userService=(UserService) context.getBean("user");
        //3.使用Bean对象(非必须)
        userService.sayHi();

    }
}

四、总结

1.操作容器之前,先要有容器,所有先要得到容器。

2.存对象

a.创建Bean(普通类)

b.将Bean注册(配置)到spring-config.xml中

3.取对象

a. 得到 Spring 上下⽂,并读取到 Spring 的配置⽂件。

b. 获取某⼀个 Bean 对象。

c. 使⽤ Bean 对象

附上流程图

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值