框架基本概念

  • jar包的作用

为了解决不同项目的重复代码

  • 框架

什么是框架
软件的半成品,是研发者封装好的功能代码。
具体表现形式
jar包
框架基本使用步骤

1) 导入jar包
2) 配置框架的配置文件
3) 根据API进行功能开发

Spring 简介

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
Spring 解决业务层与其它层的耦合关系(高内聚、低耦合)。

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>

平哥
17 声望2 粉丝