Spring_IoC&DI及其注解开发

Spring 简介

1. 概念

分层的轻量级开源框架,以IoC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)

2. 优势

* 方便解耦,简化开发
* 支持AOP编程
* 支持声明式事物
* 方便程序测试
* 方便继承各种优秀框架
* 降低JavaEE API的使用
* 源码是编码规范的范例

3. 体系结构

在这里插入图片描述

Spring快速入门

开发步骤

1. 导入Spring开发的基本包坐标
	<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
	</dependencies>
	
2. 编写Dao接口和实现类
3. 创建Spring核心配置文件
	在resources创建applicationContext.xml
	
	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">
	</beans>
	
4. 在Spring配置文件中配置实现类
	<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
	
5. 在Spring的API获得Bean实例
ApplicationContext app = new ClassApplicationContext("applicationContext.xml");
//UserDao userDao = (UserDao) app.getBean("userDao"); 通过Id从容器中获取
UserDao userDao = app.getBean(UserDao.class);	//通过Java类型从容器中获取,容器中有多个不可用

Spring核心配置文件

1. Bean标签

概念:用于配置对象交由Spring来创建,默认情况下调用无参构造方法,如果对象没有无参构造方法则不能创建成功

基本属性:
		id:Bean实例再Spring容器中的唯一标识
		class:Bean的全限定名称

可选属性:
		scope:
					singleten,单例的(默认);在应用加载时创建对象,应用卸载时随容器的销毁而销毁
					prototype,多例的;使用对象时创建新的对象实例,长时间未使用被Java垃圾回收机制回收

实例化方式:
		无参构造方法实例化(默认)
		<bean id = "userDao" class = "cn.spring.dao.impl.UserDaoImpl" />
		工厂静态方法实例化
		<bean id = "userDao" class = "cn.spring.factory.StaticFactoryBean" factory-method = "createUserDao" />
		工厂实例方法实例化
		<bean id = "factoryBean" class = "cn.spring.factory.DynamicFactoryBean" />
		<bean id = "userDao" factory = "factoryBean" factory-method = "createUserDao" />

2. 依赖注入(Dependency Injection)

  1. set方法注入

     1. 创建UserService实例,为UserService添加UserDao属性,UserService内部调用UserDao的save()方法
     2. 在Spring容器中配置UserService实现类,利用property标签配置UserDao属性
     	<bean id="userService" class=“cn.spring.service.impl.UserServiceImpl”>
     		<property name="userDao" ref="userDao" />
     	</bean>
    
  2. p命名空间注入

     1. 引入p命名空间
     	xmlns:p="http://www.springframework.org/schema/p"
     2.  注入
     	<bean id="userService" class="cn.spring.service.impl.UserServiceImpl" p:userDao-ref="userDao" />
    
  3. 构造方法注入

     1. 创建有参构造方法
     2. 调用有参构造方法注入
     	<bean id="userService" class="cn.spring.service.impl.UserServiceImpl" >
     		<constructor-arg name="userDao" ref="userDao" />
     	<bean>
    

2. 依赖注入的数据类型

  1. 普通数据类型的依赖注入

     <property name="name" value="value" />
    
  2. 集合数据类型的注入

     (1)List<普通数据类型> 
     	<property name="listName">
     		<list>
     			<value>value1</value>
     			<value>value2</value>
     			<value>value3</value>
     		</list>
     	</property>
     
     (2)List<引用数据类型>
     	<bean id="u1" class="com.itheima.domain.User"/>
     	<bean id="u2" class="com.itheima.domain.User"/>
     	<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
     	    <property name="userList">
     	    	<list>
     	    		<bean class="com.itheima.domain.User"/>
     	    		<bean class="com.itheima.domain.User"/>
     	    		<ref bean="u1"/>
     	    		<ref bean="u2"/>
     	    	</list>
     	    </property>
     	  </bean>
    
  3. 集合数据类型

     (1)Map<String, User>
     	<bean id="u1" class="com.itheima.domain.User"/>
     	<bean id="u2" class="com.itheima.domain.User"/>
     	<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
     		<property name="userMap">
     			<map>
     				<entry key="user1" value-ref="u1"/>
     				<entry key="user2" value-ref="u2"/>
     			</map>
     		</property>
     	</bean>
    
  4. 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>
    

3. 引入其他配置文件(分模块开发)

<import resource="applicationContext-xxx.xml" />

4. 核心配置文件重点配置总结

<bean>标签
	id属性:Spring容器中的唯一标识,不允许重复
	class属性:实例化Bean的全限定名
	scope:Bean的作用范围,常用singleton和prototype
	<properye>标签
		name属性:属性名
		value属性:普通属性值
		ref属性:注入的对象引用值
		<list>标签
		<map>标签
		<properties>标签
	<constructor-arg>标签
<import>标签:导入其他的Spring的分文件

Spring相关API

ApplicationContext

1. 定义:接口类型,代表应用上下文,可以通过实例获得Spring容器中的对象

2. 实现类:
	1) ClassPathXmlApplicationContext
		从类的根路径下加载配置文件
	2)	FileSystemXmlApplicationContext 
		从磁盘路径上加载配置文件
	3) AnnotationConfigApplicationContext
		使用注解配置容器对象时,使用此类来创建spring容器
		
3. getBean()方法
	当参数为字符串时从容器中根据id查找,返回值是Object;当参数类型是Class类型时,根据类型从容器中匹配Bean实例,当对应的Bean有多个时报错

Spring配置数据源

1. 数据源开发步骤

1. 导入数据源的坐标和数据库驱动坐标
	<dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.32</version>
    </dependency>
    <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.10</version>
    </dependency>
    
2. 创建数据源对象
3. 设置数据源的基本连接数据
4. 使用数据源获取连接资源和归还连接资源

2. Spring配置数据源

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

3. 抽取JDBC配置文件

1. 引入context命名空间和约束路径
	命名空间:xmlns:context="http://www.springframework.org/schema/context"
	约束路径:http://www.springframework.org/schema/context
			 http://www.springframework.org/schema/context/spring-context.xsd
2. Spring容器加载properties文件
	<context:property-placeholder location="classpath:jdbc.properties"/>
3. 使用SpringEL表达式获取对应的值
	<property name="driverClass" value="${jdbc.driver}"/>

注解开发

0. 回顾

使用ApplicationContext的实现类AnnotationConfigApplicationContext加载注解配置类

1. 原始注解

@Component		使用在类上实例化Bean
@Controller			使用web层类上用于实例化Bean
@Service			使用在service层类上实例化Bean
@Repository		使用在dao层类上实例化Bean
@Autowired		使用在字段上用于根据类型依赖注入
@Qualifier			使用在字段上用于根据名称进行依赖注入,需配合@Autowired使用
@Resource			相当于@Autowired+@Qualifier
@Value				注入普通属性
@Scope				标注Bean的作用范围
@PostConstruct	使用在方法上标注该方法是Bean的初始化方法
@PreDestroy		使用在方法上标注该方法是Bean的销毁方法

2. 新注解

@Configuration		用于指定当前类是一个Spring配置类,创建容器时会加载注解
@ComponentScan	用于指定Spring初始化容器时要扫描的包
@Bean					使用在方法上,会将方法的返回值存储到Spring容器当中
@PropertySource	用于加载properties文件中的配置
@Import					用于导入其他配置类

Spring整合Junit

(1) 导入Spring集成Junit的坐标
(2) 使用@Runwith注解替换原来的运行期:@Runwith(SpringJUnit4ClassRunner.class)
(3) 使用@ContextConfiguration指定配置文件配置类
(4) 使用@Autowired注入需要测试的对象
(5) 创建测试方法进行测试
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值