Spring _day01_下载、概述、监听器

时间:2022-09-10 13:18:16
  • Spring:SE/EE开发的一站式框架。

​ 。一站式框架:有EE开发的每一层解决方案。

​ 。 WEB层 :SpringMVC

​ 。 Service层 :Spring的Bean管理,Spring声明式事务

​ 。 DAO层 :Spring的Jdbc模板,Spring的ORM模块l Spring:SE/EE开发的一站式框架。

  • 概念:【面试】

​ IoC: 控制反转:将对象的创建权反转给(交给)Spring

​ DI:依赖注入,前提是要有IoC的环境,Spring管理这个类的的时候将类的依赖属性注入(设置)进来

​ 【总而言之:IoC是把类交给Spring管理,DI是给这个类的属性赋值】

​ AOP:

  • Spring官网:spring.io

  • 传统方式程序开发遇到的问题:

    面向接口编程,可以用到面向对象的多态特性,方便程序的拓展,不好的是接口和实现类之间有耦合,联系过紧。切换底层实现的时候,要修改源代码。

    好的设计模式,尽量满足OCP原则,在尽量不修改源代码的基础上对程序进行拓展。

    工厂模式是一个很好的解决方案, 虽然接口和 实现类之间没有耦合,但是工厂和接口之间有耦合。一旦接口发生变动,就要对工厂进行更改。如此一来,又造成对代码的大幅度修改。

    解决方案:工厂+反射+配置文件来实现程序解耦和

1、开发准备

1.1spring的开发包目录说明

docs :Spring的开发规范和API

libs :Spring的开发的jar和源码

schema :Spring的配置文件的约束

1.2开发最基础的jar包

spring-beans-4.2.4.RELEASE.jar

spring-context-4.2.4.RELEASE.jar

spring-core-4.2.4.RELEASE.jar

spring-expression-4.2.4.RELEASE.jar

在开发过程中需要记录日志,还需要一个日志记录包:

位于依赖库中 :com.springsource.org.apache.commons.logging-1.1.1

jarapache提供了一个接口规范,具体实现的还是log4j:

com.springsource.org.apache.log4j-1.2.15.jar

1.3入门程序

建项目(web或java项目均可),导包~

编写配置文件:

<!--引入约束:spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html-->
<!--xsd-configuration.html-->

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

    <bean id="userdao" class="com.simon.spring.dao.Impl.UserDaoImpl">
        <property name="name" value="Simon"></property>
    </bean>

</beans>

UserDao接口:

package com.simon.spring.dao;

public interface UserDao {
    public void init();
}

UserDaoImpl:

package com.simon.spring.dao.Impl;
import com.simon.spring.dao.UserDao;

public class UserDaoImpl implements UserDao {

    String name ;
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void init() {
        System.out.println("userdao is initing。。。"+name);
    }
}

在service中测试:

package com.simon.spring.service;
import com.simon.spring.dao.UserDao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserService {
    @Test
    public void test(){
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("config/applicationContext.xml");
        UserDao userdao =(UserDao)applicationContext.getBean("userdao");
        userdao.init();
    }
}

2、Spring的工厂类

2.1BeanFactory : 老版本的工厂类

​ 它在调用getBean的时候才会生成实例

2.2 ApplicationContext :新版本的工厂类

​ 实现BeanFactory,它还有两个实现类 :

​ FileSystemXmlApplicationContext :加载文件系统中的配置文件

​ ClassPathXmlApplicationContext : 加载类路径下的配置文件

​ 它在加载配置文件的时候,就会把配置文件中管理的类给实例化出来

3、Bean的相关配置

3.1 bean 标签中的id和name有什么区别 【了解】

​ id : 使用了唯一约束,里面不能出现特殊字符

​ name : 理论上可以重复出现,实际开发中不可以重复。可以出现特殊字符。【在与struts1整合的时候会用】

3.2 bean的生命周期的配置 【了解】

先修改配置文件:

    <bean id="userdao" class="com.simon.spring.dao.Impl.UserDaoImpl" init-method="setup"                                                               destroy-method="destroy">
        <property name="name" value="Simon"></property>
    </bean>

在UserDaoImpl类中添加这两个方法:

    public void  setup(){
        System.out.println("这是setup方法。。。");
    }
    public void destroy(){
        System.out.println("这是destroy方法。。。");
    }

工厂被销毁的时候,才会执行销毁方法,在测试类中添加 :

 ((ClassPathXmlApplicationContext) applicationContext).close();  //bean是单例的
3.3 bean的作用范围的配置【重点】
  • scope :代表Bean的作用范围:

    singleton :默认的,Spring 会采用单例模式创建这个对象。

    prototype :多例模式。(Struts2和Spring整合一定会用到)

    request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。

    session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。

    globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。

4、Spring的属性注入

Spring支持前两种三种办法:

4.1 有参构造方法的方式

编写实体类User ,属性为 name,age,sex ,提供有参和无参构造,修改配置文件如下 ,自行测试

    <bean id="user" class="com.simon.spring.domain.User">
        <constructor-arg name="name" value="Simon"></constructor-arg>
        <constructor-arg name="sex" value="男"></constructor-arg>
        <constructor-arg name="age" value="19"></constructor-arg>
    </bean>
4.2 set方法的方式

编写实体类User ,属性为 name,age,sex ,提供set方法,修改配置文件如下,自行测试

    <bean id="user2" class="com.simon.spring.domain.User2">
        <property name="name" value="Simon"></property>
        <property name="sex" value="男"></property>
        <property name="age" value="19"></property>
    </bean>
4.3 set方法注入对象类型的属性

Simon的属性中添加他的好朋友 Lucy lucy 修改配置文件 如下,对象类型注入用ref 自行测试

    <!--引用类型注入的测试-->
    <bean id="simon" class="com.simon.spring.domain.Simon">
        <property name="name" value="Simon"></property>
        <property name="sex" value="男"></property>
        <property name="age" value="19"></property>
        <property name="lucy"  ref="lucy"></property>
    </bean>

    <bean id="lucy" class="com.simon.spring.domain.Lucy">
        <property name="name" value="Lucy"></property>
        <property name="sex" value="女"></property>
        <property name="age" value="19"></property>
    </bean>
4.4 P名称空间的注入方式(Spring 2.5 之后)

通过引入P名称空间完成属性的注入:

写法:

​ 普通属性 p:属性名 = ”值“

​ 对象属性 p:属性名-ref="值"

4.4.1具体用法:

在头文件中加入:

xmlns:p="http://www.springframework.org/schema/p"

使用P名称空间:自行测试

<bean id="simon2" class="com.simon.spring.domain.Simon"
                                    p:name="simon2" p:age="19" p:lucy-ref="lucy"></bean>
4.5 SpEL的属性注入(Spring 3.0之后的版本)

Spring 的表达语言,特点是灵活:Spring Expression Language 语法 #{SpEL}

    <bean id="simon3" class="com.simon.spring.domain.Simon">
        <property name="name" value="#{lucy.getName()}"></property>
        <property name="sex" value="#{lucy.getSex()}"></property>
        <property name="age" value="#{lucy.getAge()}"></property>
        <property name="lucy"  value="#{lucy}"></property>
    </bean>
4.6 接口注入的方式
4.7 集合属性的注入
    <bean id="collection" class="com.simon.spring.arr.CollectionDemo">
        <!--数组类型的注入-->
        <property name="str">
            <list>
                <value>simon</value>
                <value>lucy</value>
                <value>miki</value>
            </list>
        </property>

        <!--List集合类型的注入-->
        <property name="list">
            <list>
                <value>凤姐</value>
                <value>如花</value>
                <value>翠花</value>
            </list>
        </property>

        <!--Set集合的注入-->
         <property name="setArr">
            <set>
                <value>如花</value>
                <value>凤姐</value>
                <value>翠花</value>
            </set>
        </property>

        <!--Map集合的注入-->
        <property name="map">
            <map>
                <entry key="1" value="a"></entry>
                <entry key="2" value="b"></entry>
                <entry key="3" value="c"></entry>
            </map>
        </property>
    </bean>

5、spring的分模块开发

5.1在加载配置文件的时候,加载多个配置文件
 ApplicationContext applicationContext =new                                       ClassPathXmlApplicationContext("config/applicationContext.xml,                                                                                config/applicationContext2.xml");
5.2在一个配置文件中引入多个配置文件
 <import resource="applicationContext2.xml" />

Spring _day01_下载、概述、监听器的更多相关文章

  1. 2017&sol;4&sol;27-Gradle的配置与Spring的下载

    Gradle的配置与Spring的下载 1.Gradle 1) 介绍 Gradle是一个基于Groovy的构建工具,类似Maven,但是比其更加简单轻便.它可以自动化地进行软件构建.测试.发布.部署. ...

  2. spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包

    下载spring http://spring.io/ 最重要是在特征下面的这段话,需要注意: All avaible features and modules are described in the ...

  3. 214&period; Spring Security:概述

    前言 在之前介绍过了Shiro之后,有好多粉丝问SpringSecurity在Spring Boot中怎么集成.这个系列我们就和大家分享下有关这方面的知识. 本节大纲 一.什么是SpringSecur ...

  4. &lbrack;转&rsqb;spring 官方下载地址(Spring Framework 3&period;2&period;x&amp&semi;Spring Framework 4&period;0&period;x)

    SPRING官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常麻烦,下给出Spring Framework jar官方直接下载路径: h ...

  5. spring框架的概述与入门

    1. Spring框架的概述 * Spring是一个开源框架 * Spring是于2003 年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J ...

  6. Spring官方下载地址

    改版后的Spring官方网站下载地址找不到了,汗~~ 可以通过该链接下载对应的包:http://repo.spring.io/milestone/org/springframework/ Spring ...

  7. Spring jar 下载地址

    Spring jar 下载地址 http://repo.springsource.org/libs-release-local/org/springframework/spring/

  8. spring 中国下载点

    http://repo.spring.io/libs-release-local/org/springframework/spring/ spring 中国下载点

  9. Spring 框架的概述以及Spring中基于XML的IOC配置

    Spring 框架的概述以及Spring中基于XML的IOC配置 一.简介 Spring的两大核心:IOC(DI)与AOP,IOC是反转控制,DI依赖注入 特点:轻量级.依赖注入.面向切面编程.容器. ...

随机推荐

  1. T-SQL学习记录

    T-sql是对SQL(structure query language )的升级.可以加函数. 系统数据库:master管理数据库.model模版数据库,msdb备份等操作需要用到的数据库,tempd ...

  2. Hibernate 注解的用法以及说明

    1.类级别注解 @Entity     映射实体类 @Table    映射数句库表  @Entity(name="tableName") - 必须,注解将一个类声明为一个实体be ...

  3. webapi输入验证过滤器ValidationActionFilter

    public class validationActionFilter:ActionFilterAttribute { public override void OnActionExecuting(S ...

  4. 关于UIView的userInteractionEnabled属性

    关于UIView的userInteractionEnabled属性 如果父视图为ParentView包含一个Button,如果再ParentView上添加子视图ChildView,且ChildView ...

  5. 腾讯 pc端面试(2015&period;10&period;26)

    整个面试过程全部围绕着我在前一家公司做过的项目开始提问.因为这个项目是我主要负责的,所以面试官第一个问题是让我讲解了整个项目的框架结构.在对于项目的框架结构的讲解方面,大致条理还算清醒但是因为很少对做 ...

  6. consul的安装配置 一centos7环境

    centos7上consul的安装--新手笔记 环境 我用的是centos7, 用的是vmware 一 安装系统后首先要设置ip ifconfig eth0 →查看IP 不过输出的信息多一些 ifco ...

  7. python设置字体颜色

    在开发项目过程中,为了方便调试代码,经常会向stdout中输出一些日志,默认的这些日志就直接显示在了终端中.而一般的应用服务器,第三方库,甚至服务器的一些通告也会在终端中显示,这样就搅乱了我们想要的信 ...

  8. Oracle&OpenCurlyDoubleQuote;死锁”模拟

    本着实验优先的原则,先模拟死锁的发生,然后在列一下死锁产生的四个必要条件和处理死锁的一般策略. 1.创建两个简单的表t1_deadlock和t2_deadlock,每个表中仅仅包含一个字段asys@o ...

  9. gulp入门

    gulp是基于Nodejs的自动化任务工具,类似java中的ant,结合相关插件可方便的完成javascript/coffee/sass/less/html/image/css等文件的的测试.检查.合 ...

  10. org&period;mybatis&period;spring&period;MyBatisSystemException&colon; nested exception is org&period;apache&period;ibatis&period;reflection&period;ReflectionException&colon; There is no getter for property named &&num;39&semi;&lowbar;&lowbar;frch&lowbar;lableId&lowbar;0&&num;39&semi; in &&num;39&semi;class com&period;cd&period;entity&period;Page&&num;39&semi;

    #号改为$即可