Spring第一天

什么是Spring

Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。Spring的核心是控制反转( IOC )和面向切面( AOP )。

Spring的优势

  • 容器性质,方便解耦,简化开发
  • AOP编程的支持
  • 声明式事务的支持
  • 集成各种优秀框架
  • 降低JavaEE API的使用难度

Spring功能模块

alt

Spring IOC

在传统的三层架构中,各层之间相互依赖,每次调用需要创建大量的对象,非常消耗资源,Spring提供了IOC机制,以容器的形式为我们管理对象

IOC容器细节
在这里插入图片描述
创建容器对象的方式:

  • 在xml中配置< bean >元素
  • 以静态工厂的形式创建
<!--
 id 给容器中的对象起一个唯一标识
 class 工厂类的全限定类名
 factory-method 工厂类里面的静态方法
 -->
<bean id="bean" class="com.ioc.BeanStaticFactory" factory-method="getInstance">
</bean>
  • 普通工厂创建方式
<!--
 配置工厂,让Spring容器产生工厂实例
 -->
 <bean id="factory" class="com.ioc.BeanFactory">
</bean>
 <!--
 factory-bean 工厂实例在Spring容器中的唯一标 识
 factory-method 工厂实例中的方法
 -->
<bean id="bean" factory-bean="factory" factory-method="getInstance">
</bean>

bean标签细节

用于配置让spring容器来创建对象,默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功

属性

属性

  • id :给在容器中的对象提供一个唯一标识,用来获取对象
  • class: 指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数
  • scope: 指定对象范围。igleton: 默认值,单例。prototype: 多例。request: WEB 项目中,Spring容器创建一个Bean对象,会将该对象存入request。 session WEB : 项目中,Spring容器创建一个Bean对象,会将该对象存入session 。golbal session WEB: 项目中,应用在集群环境.如果没有集群环境那么 global session 相当于session
  • init-method : 指定类的初始化名称
  • destory-method : 指定类中销毁方法的名称

Spring DI

DI(Denpendency Injection) 依赖注入,是 IoC 的具体实现,通过 DI 操作就可以给对象的属性赋值,甚至对象之间的依赖关系也可以通过此操作实现。

  • 使用property注入属性
    name : 属性名,调用该属性的set方法
    value: 属性值,通过set方法赋值
    ref: 属性是其他bean类型采用ref(字符串除 外)
  • 构造方法注入
    constructor-arg 让属性赋值采用构造函数赋值
    index: 指定参数在构造函数中的索引位置
    type: 指定参数在构造函数中的数据类型
    name: 指定参数在构造函数中的名字
    value: 具体的参数值
    ref: 如果需要的数据为其他bean类型,使用ref
    需要提供对应的构造方法

注意,一定要加入p名称空间约束
在这里插入图片描述

  • 注入集合属性
<!-- 注入数组 -->
 <property name="myStrs">
	 <array>
	 <value>AAA</value>
	 <value>BBB</value>
	 <value>CCCC</value>
	 </array>
</property>
<!-- 注入List -->
<property name="myList">
	<list>
 		<value>DDD</value>
 		<value>EEE</value>
 		<value>FFF</value>
 	</list>
</property>
 <!-- 注入Set -->
 <property name="mySet">
 	<set>
 		<value>GGG</value>
 		<value>KKK</value>
 		<value>LLL</value>
 	</set>
 </property>
 <!-- 注入myMap -->
<property name="myMap">
	<map>
		<entry key="testA" value="aaa"></entry>
 		<entry key="testB"> <value>bbb</value></entry>
 	</map>
</property>
<!-- 注入Properties -->
<property name="myProps">
	<props>
		<prop key="testA">aaaa</prop> 
	 	<prop key="testB">bbbb</prop>
	</props>
</property>

基于注解的方式

创建bean对象

  • @Component 该注解加在类上代表该类需要让Spring容器 去创建对象
  • @Service: 一般用于业务层
  • @Conntroller: 一般用于表现层
  • @Repository: 一般用于持久层
  • @Value(“lisi”) 为属性注入值
  • @Autowaired 自动按照类型注入,使用注解注入属性时,set方法可以省略,该注解只能注入bean类型,当有多个相同类型时,将bean的id作为要注入对象的属性名,也可以注入成功。
  • @Qualifier 在 @Autowaired 注入的基础之上,再按照Bean的id注入。在给属性注入数据时不能独立使用,必须和@Autowire 一起使用,但是给方法参数注入时,可以独立使用。
  • @Resource 直接按照bean的id注入,只能注入bean类型
  • @Scope 指定bean的作用范围 取值为:singleton , prototype , request , session , golbalsession
  • @PostConstruct 指定初始化方法 执行顺序
    Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)

配置文件需要加入context标签
在这里插入图片描述
核心配置文件配置注解驱动

<!-- 配置要扫描的注解包 -->
<context:component-scan base-package="com.annataion">
</context:component-scan>

新注解

  • @Configuration 用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解可以使用AnnotationConfigApplicationContext(配置类.class)加载配置
  • @ComponentScan 用于指定spring在初始化容器时要扫描的包。basePackages: 指定需要被扫描的包,如果不写任何属性,默认扫描当前坐在类的包以及子包。
  • @Bean 该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器
  • @PropertySource 用于加载 .properties 文件。例如当配置数据库连接池的时候就可以使用该注解加载 properties 文件。
    属性:values[] : properties 文件所在路径,文件如果在类路径下,需要加载 classpath。使用@Value("${jdbc.driver}")方式注入属性
  • @Import 用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration注解。当然,写上也没问题。

整合JUNIT

整合junit4
  • @RunWith(SpringJUnit4ClassRunner.class) :
    指明使用什么类来创建容器,当然也可以写成以下方式@RunWith(SpringRunner.class)
  • @ContextConfiguration(classes=TestConfig.class ) : location 导入具体的配置文件,classes 导入具体的配置类
整合junit5
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes=TestConfig.class)
public class SpringJUnit5Test {
	@Autowired
 	private Student student;
 	@org.junit.jupiter.api.Test
 	public void test1() {
 		System.out.println(student);
 	}
}

@ExtendWith(SpringExtension.class) 指示JUnit Jupiter使用Spring支持扩展测试。

当然,也可以写成这种形式

@SpringJUnitConfig(classes = TestConfig.class)
public class SpringJUnit5Test {
	@Autowired
 	private Student student;
	@org.junit.jupiter.api.Test
 	public void test1() {
 		System.out.println(student);
 	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值