框架基本概念
- jar包的作用
为了解决不同项目的重复代码
- 框架
什么是框架
软件的半成品,是研发者封装好的功能代码。
具体表现形式
jar包
框架基本使用步骤
1) 导入jar包
2) 配置框架的配置文件
3) 根据API进行功能开发
Spring 简介
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
Spring 解决业务层与其它层的耦合关系(高内聚、低耦合)。
Spring IOC容器
SpringIOC的作用
降低耦合度,把对象的创建和销毁进行统一管理,用户要使用的时候在IOC容器中直接获取即可
SpringIOC的基本使用流程
1) 导入jar包
2) 配置applicationcontext.xml文件,使用<bean>
标签将需要管理的类进行配置
3) 在代码调用中使用ClassPathXmlApplicationContext获取ApplicatoinContext对象
4) 通过ApplicationContext对象的getBean方法进行目标对象的获取
具体代码:
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationcontext.xml");
Student student = (Student)ac.getBean("stu");
SpringIOC创建对象的三种方式
1. 构造器方式,分为无参构造和有参构造
1) pojo类:
创建有参构造方法和无参构造方法
2) 在applicationcontext.xml中配置:
<!--无参构造方法-->
<bean id="stu1" class="com.gcp.pojo.Student"></bean>
<!--有参构造-->
<bean id="stu2" class="com.gcp.pojo.Student">
<constructor-arg index="0" type="java.lang.Integer" name="sid" value="1"></constructor-arg>
<constructor-arg index="1" type="java.lang.String" name="sname" value="张三"></constructor-arg>
</bean>
3) 代码中获取ApplicationContext对象利用getBean方法获取对象
2. 属性注入方式
1) pojo类:定义相应的属性,并 **提供相应的setter方法**
2) 在applicationcontext.xml中配置:
<bean id = "stu3" class="com.gcp.Student">
<property name="sid" value="2"></property>
<property name="sname" value="李四"></property>
</bean>
3) 代码中获取ApplicationContext对象利用getBean方法获取对象
3. 工厂模式方式:分为静态工厂和动态工厂
1) 静态工厂:
- 传统定义:
pulic class AFactory{
public static A newInstance(){
A a = new A();
return a;
}
}
- SpringIOC方案,在applicationcontext.xml中配置:
<bean id="stu4" class="com.gcp.factory.AFactory" factory-method="newInstance"></bean>
2) 动态工厂
- 传统定义:
public class AFactory{
public A newInstance(){
A a = new A();
return a;
}
}
- SpringIOC方案,在applicationcontext.xml中配置:
<bean id = "AFactory" class="com.gcp.factory.AFactory"></bean>
<bean id = "stu5" factory-bean="AFactory" factory-method="newInstance"></bean>
DI依赖注入的作用及使用方式
DI依赖注入的作用
解决了一个对象的创建包含另一个对象的问题。
DI依赖注入的三种注入方式
1. 有参构造
示例,在applicationcontext.xml中配置:
<bean id="cla" class="com.gcp.pojo.Clazz1">
<constructor-arg name="cno" value="1" ></constructor-arg>
</bean>
<bean id="stu6" class="com.gcp.pojo.Student">
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="name" value="zs"></constructor-arg>
<constructor-arg name="sex" value="男"></constructor-arg>
<constructor-arg name="clazz" ref="cla"></constructor-arg>
</bean>
2. 属性setter方法注入
<bean id="stu" class="com.bjsxt.spring01.Student">
<property name="sex" value="男"></property>
<property name="age" value="18"></property>
<property name="name" value="zs"></property>
<property name="clazz" ref="cla"></property>
</bean>
3. 设置值自动注入
<!--自动注入
autowire的可选择值
*底层调用调用的都是set方法
byName:查找方式 整个配置文件中查询【bean标签的ID名称】和【注入实体类中的属性名】一致的话,就完成自动注入
byType:查找方式 整个配置文件中查询【bean标签类型】和【注入实体类中的属性类型】一致的话,就完成自动注入
*底层走的是构造器
constructor:首先根据bena 标签的ID名称进行匹配,如果没有对应的值,再根据bean的类型进行匹配
-->
<bean id="stu" class="com.bjsxt.spring01.Student" autowire="constructor"></bean>
单例模式和多例模式的设置
通过设置bean标签的scope属性,将其属性设置为prototype,表明该bean对象在每次getBean的时候才创建,每次都重新创建。
<!--默认singleton-->
<bean id="p20" class="com.bjsxt.pojo.Person" scope="singleton">
<property name="name" value="p20" />
</bean>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。