Spring是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架
依赖
spring web mvc的依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.18</version>
</dependency>
spring jdbc的依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.18</version>
</dependency>
控制反转(IOC)
在使用dao层操作数据库时,不直接new出dao层的对象来处理数据,而是加一层service层,service层放置一个接口用于动态注入dao层的对象,来使用户完成不同的dao层操作,这就又程序主动创造对象变为了被动接收对象,主动权从程序员的手中,变到了用户的手中。 ==举个通俗的例子,==原本老师想抽查哪个组的作业,就得去让组长收作业,这样不仅浪费了老师做别的事(重要的事)的时间,而且一旦有了新的小组,还得老师去选新的组长,并且指导他收其他人的作业。而有了IOC的思想之后,老师安排一个班长,只要和班长交接完成,那么想要哪一组的作业告诉班长就行了,班长负责告诉相应的组长,这样不仅在收作业上节约了老师的时间,以后来了新的小组,也只需要班长交涉,不需要占用老师的时间了。
在Spring中的体现为,把对象放入容器,用的时候去取,不关心容器如何处理对象,如何实例化对象。
ApplicationContext.xml
<?xml version="1.0" encoding="UTF8"?>
<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>
bean的加载和调用
加载
在ApplicationContext.xml里配置bean
<bean id="hello" class="com.zxt.pojo.Hello">
<property name="str" value="Spring"/>
</bean>
通过对象的无参构造加载!有参构造的创建方法在下面。
调用
这是固定的格式:
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
取bean的方法:
类型 变量名 = (类型) 上下文对象.getBean(“bean的id”);
通过上下文对象的getBean() 方法获取一个Object对象,再强转成它原来的类型,举个例子:
Hello hello = (Hello) context.getBean("hello");
有参构造的加载
实体类构造器从无参变为有参
public User(String name) {
this.name = name;
}
1.通过下标匹配参数
将有参构造的第index 个参数,注入value 的值
<bean id="User" class="com.zxt.pojo.User">
<constructor-arg index="0" value="注入第0个参数"/>
</bean>
2.通过参数类型匹配参数(不建议使用)
类型需要写全路径
<bean id="User" class="com.zxt.pojo.User">
<constructor-arg type="java.lang.String" value="注入类型为String的参数"/>
</bean>
3.通过参数名匹配参数
这是最好理解的方式,把value 处的参数传入到参数列表中name 的位置
<bean id="User" class="com.zxt.pojo.User">
<constructor-arg name="name" value="注入参数名为name的参数"/>
</bean>
Spring配置
alias
别名,name 是一个bean的id,alias 是那个bean的新id。
<alias name="User" alias="user"/>
bean
唯一标识符就类似于变量名,全限定名就是包名+类名,别名可以有多个。
<bean id="唯一标识符" class="全限定名" name="别名1,别名2······">
</bean>
bean的scope
默认是 singleton 单例,创建的都是同一个对象。
prototype 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()。
request 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于web的Spring WebApplicationContext环境。
session 同一个HTTP Session共享一个Bean,不同Session使用不同的Bean。该作用域仅适用于web的Spring WebApplicationContext环境。
import
一般用于团队开发使用,将多个配置文件导入、合并为一个。
<import resource="ApplicationContext1.xml"/>
<import resource="ApplicationContext2.xml"/>
这样 ApplicationContext1.xml 和 ApplicationContext1.xml 里面所有的bean就会被合并到调用他们的xml文件里了。 如果内容相同就会合并。
|