Spring框架-基础

4 篇文章 0 订阅

spring框架:
Web层(表现层)
​ SpringMVC
​ Struts2
Service层(业务层)
​ Spring
Dao层(持久层)
​ JdbcTemplae(Spring)
​ MyBatis
​ Hibernate/Jpa/SpringDataJpa
Spring框架在JavaEE的三层架构中都可以完成对应功能开发!!
spring又可分为7大模块:

  1. Spring Core (IOC容器):创建对象,给对象属性赋值 ***
    2)Spring AOP(面向切面编程): 事务管理,自定义AOP编程 ***
    3)Spring ORM :Spring整合ORM框架(Hibernate/JPA)*
  2. Spring JDBC : 提供JdbcTemplate的,对Jdbc简单封装 *
    5)Spring Web: Spring整合Web(Servlet,Filter)*
    6)SpringMVC:Spring提供MVC表现层模块 ***
    7)Spring Context: 国际化,事件驱动编程

IOC容器的好处: 解耦!!!

2,程序中解耦应用-控制反转

什么是IOC和DI?,
IOC,Inverse Of Control 控制反转,把创建对象的权力,由自己创建(new)改为工厂来创建。解决创建对象的耦合问题!
DI,Denpedency Injection 依赖注入,把对象属性赋值的权力,由自己完成改为工厂来完成。解决给对象属性赋值的耦合问题!

###bean标签配置细节

  1. id: 给创建的对象一个别名(必须唯一的) (推荐使用)
    2) class: 需要创建类的全名(注意必须是类的全名)
    3) name: 给创建的对象创建多个别名,别名之间使用,逗号隔开
    4) scope: 创建对象的作用域,创建单例对象还是多例对象
    singleton: 单例的,默认值。每次调用getBean方法获取的对象都是同一个!
    prototype: 多例的。每次调用getBean方法都会创建一个新的对象!
    request: web中使用。每个用户的请求都会创建一个新的对象!
    session: web中使用。每个session会话中都会创建一个新的对象!
    glbalsession: web中使用。在web集群环境中使用,在同一个集群环境下,只会有一个对象!
    5)lazy-init: 是否延迟创建对象。
    false: 不延迟,默认值。在创建IOC容器的时候,就会根据bean配置创建好对象,等待程序来获取
    true: 延迟。在创建IOC容器的时候,先不创建对象,等到程序来获取(getBean)的时候再创建对象
    6) init-method和destroy-method: 对象的生命周期方法(要在实体类上也创建相应的方法)
    init-method: 初始化方法。在创建完对象后立即调用init-method
    destroy-method: 销毁方法。在销毁对象之前调用destroy-method

###创建容器的三种方式:
1,绝对路径(从根目录)
2,相对路径(从项目src目录开始查询)
3,使用类路径方式: 项目的类路径,就是在resources目录下 (推荐使用)

###SpringIOC容器创建对象的三种方式:
方式1:默认无参数构造函数创建对象(推荐方式)
方式2:工厂类的静态方法创建对象
方式3:工厂类的实例方法创建对象

<?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">


    <!--
       IOC容器创建对象的三种方式
     -->
    <!-- 1. 默认无参的构造方式
        注意:需要创建的对象必须提供无参构造方式
    -->
   <!-- <bean id="person" class="com.huihui.pojo.Person"/>-->

    <!-- 2.工厂类的静态方法 -->
    <!--
       底层: Person person = PersonFactory.getPersonByStatic();

       class: 工厂类的全名
       factory-method: 工厂类的一个静态方法名称
     -->
    <!--<bean id="person" class="com.huihui.pojo.PersonFactory" factory-method="getPersonByStatic"></bean>-->

    <!-- 3. 工厂类的实例方法 -->
    <!--
       底层:
           PersonFactory factory = new PersonFactory();
           Person person = factory.getPerson();
     -->
    <!-- 3.1 先创建工厂类对象 -->
    <bean id="factory" class="com.huihui.pojo.PersonFactory"/>
    <!-- 3.2 使用工厂对象调用实例发方法
            factory-bean: 创建工厂对象的id
            factory-method: 工厂类的实例方法
    -->
    <bean id="person" factory-bean="factory" factory-method="getPerson"/>
     
</beans>

###SpringIOC容器依赖注入
DI, 依赖注入,关注的就是怎么给对象的属性去赋值!
1:构造器赋值: 依赖注入:给对象属性赋值

1. 带参数的构造方式

  constructor-arg 标签的使用
    1)value: 需要传递的参数值(仅限基本类型)
    2) index: 参数的索引号,从0开始,不写index,按照配置从下往下的顺序加载
    3) name: 指定方法的形参名称来进行赋值, 不写,就自动匹配形式参数名称
    4)type: 指定方法的参数类型赋值, 默认不写就是String类型
    5) ref: 引用类型,引用IOC容器的另一个bean(对象)
        注意:value和ref只能使用其中一个

2 :使用setter方法注入

   property: 通过调用setter进行赋值
   name: setter方法名称。去掉set,把首字母小写

<bean id="person" class="com.huihui.pojo.Person">
    <property name="id" value="666"/>
    <property name="username" ref="str"/>
</bean>

3:p命名空间
先导入p名称空间,然后再在bean.xml
<bean id = “”…p:id=“999” p:username-ref=“str”/>

import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

/**
 *
 */
public class Person {

    //定义属性
    private int id;
    private String username;
    private String sex;

    public Person(){
        System.out.println("创建Person对象!!");
    }


    //方式一:使用带参数的构造方式进行属性的依赖注入
    public Person(int id,String username){
        this.id = id;
        this.username = username;

    }
    public Person(String sex,String username){
        this.sex = sex;
        this.username = username;
    }

    //方式二:使用setter方法对属性辅助
    public void setId(int id) {
        System.out.println("调研Person的setId");
        this.id = id;
    }

    public void setUsername(String username) {
        System.out.println("调研Person的setUsername");
        this.username = username;
    }

    //集合类型
    private List<String> list;
    private Set<String> set;
    private Map<String,String> map;
    private String[] array;
    private Properties properties;


    public void setSex(String sex) {
        this.sex = sex;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public void setSet(Set<String> set) {
        this.set = set;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    public void setArray(String[] array) {
        this.array = array;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值