Spring框架

Spring

Spring框架是Java开发领域中最流行的框架之一,它简化了企业级应用的开发。

核心概念

  1. 依赖注入(DI): Spring通过DI来管理对象之间的依赖关系。
  2. Spring容器: 负责创建、配置和管理对象。
  3. IoC控制反转:对象的创建控制权由程序转移到外部

快速入门

首先了解传统案例项目的结构

puiblic class UserDao{
	public void save(){
		System.out.println("userDao-->run!");
	}
}
public class UserService{
	private UserDao userDao = new UserDaoImpl();
	public void save(){
		System.out.println("userService-->run!");
		userDao.save();
	}
}

业务层调用数据层时必须实例化数据层,这样增加了程序的耦合度,
Spring提供的IoC容器技术,成功帮我们解决了在代码中实例化对象的问题。
它将这些Bean统一存储起来,在需要的位置注入过去。


下面我们通过Spring框架来实现这个业务

通过IoC获取Bean对象

  1. 通过Maven来管理工程首先导入Spring的坐标
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.2.10.RELEASE</version>
</dependency>
  1. 我们需要创建Spring配置文件,配置对应类作为Spring管理的bean
    并配置bean,在resource下建立applicationContext.xml
<!--id标签给bean起名字-->
<!--class给bean定义类型-->
<bean id="userDao" class="com.angelday.dao.UserDao"/>
<bean id="userService" class="com.angelday.service.UserService"/>
  1. 在测试类中我们写下如下代码
public class Test{
	public static void main(){
		//获取IoC容器,并且传入配置文件
		ApplicationContext ctx = new ClassPatjXmlApplicationContext("applicationContext.xml");
		//获取Bean,使用getBean("id");方法
		UserDao userDao = (UserDao)ctx.getBean("userDao");
		userDao.save();
	}
}

能够看到结果说明我们成功通过IoC从Spring容器中拿出Bean,并调用了它的方法。
但是我们发现在Service中也实例化了Dao层的对象。因为需要指明Service是依赖Dao而执行的,通过DI就可以代替它。

DI解决Bean之间的耦合

UserService中依赖这行代码调用UserDao中的方法

private UserDao userDao = new UserDaoImpl();

现在我们就使用DI来代替这句实例

  1. 删除UserService中new对象的形式,并创建Setter方法
public class UserService{
	private UserDao userDao;
	public void setUserDao(UserDao userDao){
		this.userDao = userDao;
	}
}
  1. 通过配置文件来保持这两个类之间的关系
<bean id="userDao" class="com.angelday.dao.UserDao"/>
<bean id="userService" class="com.angelday.service.UserService">
	<!--配置server与dao的关系-->
	<property name="bookDao" ref="bookDao"/>
</bean>
<!--property标签表示配置当前bean的属性
name属性表示配置哪一个类中具体的属性
ref属性表示参照哪一个bean-->
  1. 在测试类中测试Service
public class Test{
	public static void main(){
		ApplicationContext ctx = new ClassPatjXmlApplicationContext("applicationContext.xml");
		//获取Bean,使用getBean("id");方法
		UserService userService = (Service)ctx.getBean("userService");
		userService.save();
	}
}

最后我们发现,即使在Service代码中没有实例化Dao,Spring也自动装配来一个实例化对象供我们调用。

DI注入的两种方式

  1. setter注入
    上面的入门使用的就是Setter注入,首先在类中提供setter方法
    在配置文件中用< property>标签进行赋值

注意:如果在配置简单类型的值时,不需要用ref属性,而是使用value直接指明值

  1. 构造器注入
    删除上面的Setter方法,提供对应的构造方法
    修改配置文件
<bean id="UserService" class="com.angelday.service.UserService">
	<constructor-arg name="userDao" ref="userDao"/>
	<!--注意:此处name是构造方法的形参名-->
</bean>

简单类型注入方法与Setter基本相同

<constructor-arg name="username" value="Angelday"/>

自动装配

IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中

自动装配的主要方式:

  1. 按类型 2. 按名称

属性的Setter 方法还需要保留
删除配置文件中的< property>标签
添加autowire属性

<bean id="userService" class="com.angelday.service.UserService" autowire="byType" />

使用此方法即可省略手动装配的步骤。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值