Spring

Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IoC(Inverse Of Control:反转控制)和
AOP(Aspect Oriented Programming:面向切面编程)为内核.

Spring程序开发步骤

  1. 导入Spring开发的基本包坐标,即导入依赖
  2. 导入Dao接口和实现类
  3. 创建Spring核心配置文件,常命名为applicationContext.xml
  4. 在Spring配置文件中配置UserDaoImpl
  5. 使用Spring的API获得Bean实例

在pom.xml中添加

<!--导入spring的context坐标,context依赖core,beans,expression-->
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.5.RELEASE</version>
</dependency>

在resources下创建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">
<!-- 配置UserDaoImpl-->
<bean id="userDao" class=dao.impl.UserDaoImpl"></bean>
</beans>

其中id为Bean实例在Spring容器中的唯一标识,class为java目录下所对应类的路径(Bean的全限定名称)

@Test
public void test(){
	ApplicationContext applicationContext = new 
	ClassPathXmlApplicationContext("applicationContext.xml");//注入配置文件
	UserDao userDao = (UserDao) 	applicationContext.getBean("userDao");//括号中为配置文件中UserDaoImlp配置的id
	userDao.save();

Bean标签范围配置

scope的值:

  1. singleton:默认的单例的,Bean的实例化个数为1,当spring的核心文件被加载时,实例化配置的Bean实例;当应用加载创建容器时,对象就被创建了,只要spring容器存在,对象就能存活
  2. prototype:,Bean的实例化个数可以有多个,当getBean()方法被调用时实例化Bean;当使用对象时,会创建新的对象实例,当对象长时间不用时,就会被java的垃圾回收器回收

bean的依赖注入

UserService和UserDao都在Spring容器中,而最终程序直接使用UserService,所以可以在Spring容器中,将UserDao设置在UserService.

依赖注入(Dependency Injection)实Spring框架核心IOC的具体实现,在编写程序时,IOC解耦只能降低依赖关系,如,业务层仍调用持久层方法,只是使用spring后,就是利用框架把持久层对象传入业务层

Bean的依赖注入方式

构造方法

1.给实例化对象创建有参构造方法
2.构造方法注入:

<bean id="userDao" class="dao.impl.UserDaoImpl"/>
<bean id="userService" class="service.impl.UserServiceImpl"> <constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
### set方法
在UserServiceImpl中添加UserDao方法

```java
public class  UserServiceImpl implements UserService {
	private UserDao userDao;
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	@Override
	public void save() {
		userDao.save();
	} 
}

set注入配置

<bean id="userDao" class="dao.impl.UserDaoImpl"/>
<bean id="userService" class="service.impl.UserServiceImpl"> <property name="userDao" ref="userDao"/>
</bean>

简化的set注入配置

<!--引入p命名空间-->
xmlns:p="http://www.springframework.org/schema/p"
<!--修改注入方式-->
<bean id="userService" class="service.impl.UserServiceImpl" p:userDao-ref="userDao"/>
## Bean的依赖注入的数据类型
### 普通数据类型

```xml
<bean id="userDao" class="dao.impl.UserDaoImpl"> <property name="company" value="传智播客"></property> <property name="age" value="15"></property>
</bean>

集合数据类型的注入

List型:

<bean id="userDao" class="dao.impl.UserDaoImpl">
	<property name="strList"> 
		<list>
			<value>aaa</value> 
			<value>bbb</value>
 			<value>ccc</value>
		</list>
	</property>
</bean>

Map<String,User>型:

<bean id="u1" class="com.User"/>
<bean id="u2" class="com.User"/>
<bean id="userDao" class="dao.impl.UserDaoImpl"> 
	<property name="userMap"> 
		<map>
			<entry key="user1" value-ref="u1"/>
			<entry key="user2" value-ref="u2"/>
		</map>
	</property>
</bean>

前一部分的key值必须等于后一部分id

 <bean id="user1" class="Dao.Impl.User">
        <property name="name" value="張三"></property>
        <property name="age" value="20"></property>
    </bean>
    <bean id="user2" class="Dao.Impl.User">
        <property name="name" value="李四"></property>
        <property name="age" value="19"></property>
    </bean>

Properties:

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"> 
	<property name="properties"> 
		<props>
			 <prop key="p1">aaa</prop> 
 			 <prop key="p2">bbb</prop> 
			 <prop key="p3">ccc</prop>
		</props>
	</property>
</bean>

Spring的主要配置

标签:id属性,class属性,scope属性

标签:name属性(属性名称),value属性(注入普通的属性值),ref属性(注入对象引用值)
标签,标签,标签,标签

标签:导入其他的Spring的分文件

ApplicationContext的继承体系

applicationContext:接口类型,代表应用上下文,可以通过其实例获得Spring容器中的Bean对象
它的三个实现类:

  1. ClassPathXMLApplicationContext:从类的根路径下加载配置文件,较为推荐
  2. FileSystemXmlApplicationContext:它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置
  3. AnnotationConfigApplicationContext:当使用注解配置容器对象时,需要使用此类来创建 spring 容器,它用来读取注解
    创建bean实例对象时常用语句:
ApplicationContext app = new ClasspathXmlApplicationContext("xml文件")
app.getBean("id")
app.getBean(Class)

学习内容来自于B站,黑马程序员
在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐