spring基础-day01

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 + '\'' +
                '}';
    }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容

  • 2.1 我们的理念是:让别人为你服务 IoC是随着近年来轻量级容器(Lightweight Container)的...
    好好学习Sun阅读 2,709评论 0 11
  • 参考W3C Spring教程 Spring致力于J2EE应用的各种解决方案,而不仅仅专注于某一层解决方案。可以说S...
    王侦阅读 1,158评论 0 6
  • 本来是准备看一看Spring源码的。然后在知乎上看到来一个帖子,说有一群**自己连Spring官方文档都没有完全读...
    此鱼不得水阅读 6,930评论 4 21
  • 最近想系统的学习一下Spring的相关知识,在这里分享一下。也希望能帮助那些对英文技术文档阅读比较困难的朋友。接下...
    Aiibai阅读 1,553评论 5 16
  • 陳皮好處很多人都不知道,為何不同年份就不同價錢,因效果不一樣,我們常買都要五年才合適,保存好多買些放上三年,這些陳...
    Daniel均衡阅读 164评论 0 0