spring(春天),生于在2002年,由Rod Johnson创作。Spring框架是一个集众多设计模式于一身的开源的、轻量级的项目管理框架。致力于JAVAEE 轻量级解决方案。相对于原来学过的框架而言,spring框架和之前学习的 struts2 、 mybatis 框架有了本质的区别,不是替换原来的某个框架,而是对其进行整合管理。
轻量级解决方案:提供一个以简单的、统一的、高效的方式构造整个应用,并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。
Spring 框架用来 管理 [创建|使用|销毁] 项目中的组件,由于spring 框架可以帮我们生产项目中组件对象,因此也习惯称spring是一
个工厂|容器。
组件:项目中的service,dao,controller,都是项目中的组件
注意:spring框架通常不管理对实体类对象(entry)创建
1、引入依赖
<!--spring核心以及相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
2、创建组件
public interface UserDAO{
void save(String name);
}
public class UserDAOImpl implements UserDAO{
@Override
public void save(String name){
System.out.println("姓名:"+name);
}
}
3、添加配置文件
配置文件名称: 任意名称 (默认 spring.xml)
配置文件位置: 本项目中resources目录下
<?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-3.2.xsd ">
<!-- 通过spring管理组件 bean: 用来管理组件对象的创建 class: 用来指定管理组件对象的全限定名 包.类 id: 用来指定spring框架创建的当前组件对象在spring(容器|工厂)中唯一标识 全局唯一 -->
<bean class="init.UserDAOImpl" id="aa"></bean>
</beans>
4、启动工厂测试
public class TestSpring{
public static void main(String[] args) {
//启动工厂
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
//获取工厂中创建好的对象 参数:获取工厂中指定对应的唯一标识
UserDAO userDAO = (UserDAO) context.getBean("aa");
userDAO.save("小黑");
}
}
Inversion of Controll 控制反转
将对象的创建由原来(new)的方式转移到配置文件中,交给spring ,通过在配置文件中配置bean标签形式创建对象,由spring创建对象过程
<?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-3.2.xsd ">
<bean class="init.UserDAOImpl" id="aa"></bean>
<bean class="init.CityDAOImpl" id="cityDAO"></bean>
</beans>
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
UserDAO userDAO = (UserDAO) context.getBean("aa");
userDAO.save("小黑");
CityDAO cityDAO = (CityDAO) context.getBean("aa");
ciryDAO.delete("1");
}
当bean对象多了之后,ioc的好处变体现出来了
问题来了:我们可以把service对象也通过bean管理,但是在service中需要调用dao层对象,怎么办呢???
**DI(dependcy Injection)**依赖注入
定义: 为组件中成员变量完成赋值过程 这个过程称之为 依赖注入
public interface DeptService{
void save(String name);
}
public class DeptServiceImpl implements DeptService{
// 需要的组件
private DeptDAO deptDAO;
public void setDeptDAO(DeptDAO deptDAO){
this.deptDAO=deptDAO;
}
@Override
public void save(String name){
System.out.println("deptService 姓名:"+name);
deptDAO.save(name);
}
}
<?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-3.2.xsd ">
<!--管理DAO组件-->
<bean class="init.DeptDAO" id="aa"></bean>
<!--管理service组件-->
<bean class="init.DeptServiceImpl" id="deptService">
<!--依赖注入 property: 用来给组件中的属性进行复制操作 name: 用来指定给组件中那个属性名惊醒赋值 ref: 用来指定赋值对象在工厂中唯一标识 bean的id -->
<property name="deptDAO" ref="aa"/>
</bean>
</beans>
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
DeptService deptService = (DeptService) context.getBean("deptService");
deptService.save("小黑");
}
**IOC 全部概述:**控制反转 就是通过原来手动通过new关键字创建对象的权力交给spring,由spring工厂创建对象的过程,当然spring不仅要创建对象还要在创建对象的同时通过DI的方式维护组件与组件的调用关系
spring中注入方式
spring中set方式的注入语法
public interface DeptService{
void save(String name);
}
public class DeptServiceImpl implements DeptService{
// 需要的组件
private DeptDAO deptDAO;
private String name;
private Integer age;
public void setName(String name){
this.name=name;
}
public void setDeptDAO(DeptDAO deptDAO){
this.deptDAO=deptDAO;
}
@Override
public void save(String name){
System.out.println("deptService 姓名:"+name);
deptDAO.save(name);
System.out.println("Name:"+ this.name);
}
}
<?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-3.2.xsd ">
<bean class="init.DeptDAO" id="aa"></bean>
<bean class="init.DeptServiceImpl" id="deptService">
<!--set注入相关语法, 八种基本类型 + String 类型注入使用+Date类型 value属性进行赋值-->
<property name="deptDAO" ref="aa"/>
<property name="name" value="小陈123"/>
<property name="age" value="23"/>
<!--注意:在spring中日期格式默认为yyyy/MM/dd HH:mm:ss-->
<property name="bir" value="2121/12/12"/>
<!--注入数组类型-->
<property name="qqs">
<array>
<value>小陈</value>
<value>大</value>
</array>
</property>
<property name="clazzDAOS">
<array>
<ref bean="clazzDAO"/>
<ref bean="clazzDAO"/>
</array>
</property>
<!-- 注入list、set、map-->
<property name="habby">
<list>
<value>看书</value>
<value>睡觉</value>
<value>打游戏</value>
</list>
</property>
<property name="map">
<map>
<!-- 基本类型-->
<entry key="" value=""></entry>
<!-- 引用类型-->
<entry key-ref="" value-ref=""></entry>
</map>
</property>
<!-- 注入properties-->
<property name="propertis">
<props>
<prop key="driver">com.mysql.jdbc.Driver</prop>
<prop key="url">jdbc:mysql://localhost:3306/test</prop>
<prop key="username">root</prop>
<prop key="password">123456</prop>
</props>
</property>
</bean>
</beans>
spring中构造注入
使用类中构造方法为类中成员变量赋值过程, 称之为构造注入
<?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-3.2.xsd ">
<!-- 管理DAO组件 1. set方式注入 注入时使用property标签 2. 构造方法注入 注入时使用constructor-arg标签 -->
<bean class="cdi.EmpDAOImpl" id="empDAO">
<!--使用构造注入-->
<constructor-arg index="0" name="name" value="小黑"/>
<constructor-arg index="1" name="age" value="23"/>
<constructor-arg index="2" name="userDao" ref=""/>
<!-- 注入数组-->
<constructor-arg>
<array>
<value></value>
<value></value>
<value></value>
</array>
</constructor-arg>
<constructor-arg>
<list>
<value></value>
<value></value>
<value></value>
</list>
</constructor-arg>
</bean>
</beans>
缺点:需要有对应的构造方法
spring中自动注入
在spring工厂配置文件中通过制定自动注入方式 开启组件属性的自动赋值
注意:
自动注入语法
<?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-3.2.xsd ">
<bean class="adi.StudentADOImpl" id="studentDAO"></bean>
<!-- 管理service组件 autowire: 用来给组件中成员变量完成自动赋值操作 byType: 根据类型完成自动注入 根据成员变量类型去工厂找 找到对应类型完成赋值 注意:如果工厂中存在多个类型一致的组件,使用类型自动注入会报错 byName: 根据名称完成自动注入 根据成员变量名去工厂中获取与之一致名字,找到对应的赋值 -->
<bean class="adi.StudentADOImpl" id="studentService" autowire="byName"></bean>
</beans>
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/su2231595742/article/details/122280794
内容来源于网络,如有侵权,请联系作者删除!