• Spring容器


    1.Spring简介:

    a)Spring春天

    b)官网:https://spring.io

    c)设计理念:轮子理念,不要重复创造轮子;

    d)Spring可以被理解为一个容器,用于管理其他的框架;

    e)Spring个版本下载地址:https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-local/org/springframework/spring

     2.Spring FrameworkRuntime

    a) spring-aop-4.1.6.RELEASE.jar

    面向切面编程必须导入的jar包

    b) spring-aspects-4.1.6.RELEASE.jar

    面向切面编程时依赖的jar包.

    c) spring-beans-4.1.6.RELEASE.jar

    Spring的核心之一, 用于管理对象.

    d) spring-context-4.1.6.RELEASE.jar

    Spring的核心之一. 上下文, Spring上下文.

    e) spring-context-support-4.1.6.RELEASE.jar

    上下文依赖的jar包.

    f) spring-core-4.1.6.RELEASE.jar

    Spring的核心, Spring最基本的实现(支持)

    g) spring-expression-4.1.6.RELEASE.jar

    Spring的核心之一. el表达式的一个封装.

    h) spring-jdbc-4.1.6.RELEASE.jar

    Spring对jdbc封装的一个框架

    i) spring-jms-4.1.6.RELEASE.jar

    java message service. java消息服务, 消息队列.

    j) spring-orm-4.1.6.RELEASE.jar

    orm框架的封装, 例如提供了对hibernate框架的支持.

    k) spring-oxm-4.1.6.RELEASE.jar

    object xml model. 小型的框架.

    l) spring-test-4.1.6.RELEASE.jar

    用于进行测试类似于JUnit的一个框架.

    m) spring-tx-4.1.6.RELEASE.jar

    用于使用配置文件实现对实务的管理(声明式事务)

    n) spring-web-4.1.6.RELEASE.jar

    Spring对javax.servlet包及子包中的接口或类的实现或子类.

    • o) spring-webmvc-4.1.6.RELEASE.jar

    Spring提供的mvc控制器层框架. 必须依赖spring-web.jar.

    支持注解开发使用非常简单.

    p) spring-webmvc-portlet-4.1.6.RELEASE.jar

    也是一个mvc框架, 使用global session取代了Application的概念.

    q) spring-websocket-4.1.6.RELEASE.jar

    可以支持通过socket技术实现web访问. 提供了一种可以自定义中间件的技术

     

     3.Spring环境搭建

    3.1导包

    至少需要导入5个jar包

    commons-logging-1.1.3.jar

    spring-beans-4.1.6.RELEASE.jar

    spring-context-4.1.6.RELEASE.jar

    spring-core-4.1.6.RELEASE.jar

    spring-expression-4.1.6.RELEASE.jar

    3.2编写配置文件

    a)Spring 可以看成一个容器,容器对象叫ApplicationContext,用于存放所有Spring管理的对象;

    b)ApplicationContext是一个接口,通常我们使用的实现类叫ClassPathXmlApplicationContext,用于加载并解析配置文件。

    c)xml配置文件命名其实是无所谓的,一般情况下,该配置文件的名为:applicationContext.xml,放在src目录下;

    <?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: 唯一标识, 用于获取对象

    class: 标识类的全限定路径

     -->

    <bean id="person" class="com.bjsxt.pojo.Person"></bean>

    </ beans>

     d)配置文件中通过schema约束xml的格式,根元素为<beans>,<bean>标签用于创建对象,一个<

     bean>对应一个对象

    3.3测试

    Spring容器被创建时就创建对象,通过getBean方法可以获取该对象,通过getBeanDefinationNames可以获取所有Spring管理的对象的名字;

    public static void main(String[] args) {

    // 获取Spring容器对象

    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

    // 从容器中获取对象

    Person person = context.getBean("person", Person.class);

    person.show();

    String[] names = context.getBeanDefinitionNames();

    System.out.println(Arrays.toString(names));

    context.close();

    }

     4。Ioc(inversion of control)

    Ioc ,控制反转,控制指的是创建对象的操作,反转指的是将创建对象的操作交给spring来管理,由Spring来创建和管理对象的过程被称之为Ioc;

    4.1 使用无参构造器

    使用无参构造器(默认), 要求实体类必须提供无参构造器.

    4.2 使用有参构造器

    使用有参有参构造器需要通过constructor-arg标签配置

    a) name: 参数名

    b) index: 参数索引

    c) type: 参数类型

    d) value: 参数值用于基本数据类型和String

    e) ref: 引用用于对象类型

    <bean id="person2" class="com.bjsxt.pojo.Person">

    <constructor-arg name="name" index="0" type="java.lang.String" value="张三" />

    <constructor-arg name="age" index="1" type="java.lang.Integer" value="18" />

    </bean>

    4.3 使用静态工厂

    获取对象的方法是静态方法的工厂称之为静态工厂

    public class PersonFactory {

    public static Person getBean() {

    System.out.println("PersonFactory.getBean()");

    return new Person();

    }

    }

    在配置文件中通过class属性和factory-method属性指定使用静态工厂的对应方法创建对象

    <bean id="person3" class="com.bjsxt.factory.PersonFactory" factory-method="getBean"></bean>

    4.4 实例工厂(动态工厂)

    获取对象的方法是实例方法的工厂称之为实例工厂(动态工厂)

    public class Person2Factory {

    public Person getBean() {

    System.out.println("Person2Factory.getBean()");

    return new Person();

    }

    }

    在配置文件中先配置工厂对象再通过factory-bean指定工厂通过factory-method指定方法创建对象

    <bean id="factory" class="com.bjsxt.factory.Person2Factory"></bean>

    <bean id="person4" factory-bean="factory" factory-method="getBean"></bean>

    1. DI(Dependency Injection)

    依赖注入注入指的是给对象的属性赋值的过程依赖指的是依赖由Spring管理的bean对象. IoC的一部分.

    5.1 构造器注入

    在创建对象时通过构造器为对象的属性进行赋值参照IoC中的有参构造器的方式.

    5.2 设值注入

    通过调用setter方法为对象的属性赋值的过程.

    <?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="person" class="com.bjsxt.pojo.Person">

    <property name="name" value="李四"></property>

    <property name="age">

    <value>20</value>

    </property>

    <property name="list">

    <list>

    <value>aaa</value>

    <value>bbb</value>

    <value>ccc</value>

    <value>ddd</value>

    </list>

    </property>

    <property name="teacher" ref="teacher" />

    </bean>

    <bean id="teacher" class="com.bjsxt.pojo.Teacher">

    <property name="name" value="张老师"/>

    <property name="age" value="50"/>

    </bean>

    </beans>

    2. Spring整合MyBatis

    6.1 优点

    a) 不需要再定义MyBatis的配置文件了

    b) 很多对象不需要程序员去创建只需要给出配置即可

    6.2 缺点

    需要导入额外的jar包

    asm-3.3.1.jar

    cglib-2.2.2.jar

    commons-logging-1.1.1.jar

    javassist-3.17.1-GA.jar

    jstl-1.2.jar

    log4j-1.2.17.jar

    log4j-api-2.0-rc1.jar

    log4j-core-2.0-rc1.jar

    mybatis-3.2.7.jar

    mybatis-spring-1.2.3.jar

    mysql-connector-java-5.1.30.jar

    slf4j-api-1.7.5.jar

    slf4j-log4j12-1.7.5.jar

    spring-aop-4.1.6.RELEASE.jar

    spring-beans-4.1.6.RELEASE.jar

    spring-context-4.1.6.RELEASE.jar

    spring-core-4.1.6.RELEASE.jar

    spring-expression-4.1.6.RELEASE.jar

    spring-jdbc-4.1.6.RELEASE.jar

    spring-tx-4.1.6.RELEASE.jar

    spring-web-4.1.6.RELEASE.jar

    standard-1.1.2.jar

    6.3 编写配置文件

    Spring整合MyBatis的配置文件

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

    <!-- 配置数据源, spring-jdbc.jar-->

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="com.mysql.jdbc.Driver" />

    <property name="url" value="jdbc:mysql://localhost:3306/java505" />

    <property name="username" value="root" />

    <property name="password" value="root" />

    </bean>

    <!-- 配置SqlSessionFactory对象, mybatis-spring.jar-->

    <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">

    <!-- 注入数据源 -->

    <property name="dataSource" ref="dataSource" />

    <!-- 给类定义别名 -->

    <property name="typeAliasesPackage" value="com.bjsxt.pojo" />

    </bean>

    <!-- Mapper扫描器, mybatis-spring.jar-->

    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">

    <!-- 指定到哪个包进行扫描 -->

    <property name="basePackage" value="com.bjsxt.mapper" />

    <!-- 指定SqlSessionFactory -->

    <property name="sqlSessionFactory" ref="factory" />

    </bean>

    <!-- 配置service对象 -->

    <bean id="studentService" class="com.bjsxt.service.impl.StudentServiceImpl">

    <!-- 注入mapper对象 -->

    <property name="studentMapper" ref="studentMapper" />

    </bean>

    </beans>

    6.4 注意事项

    a) service实现类中需要提供mapper对象, 并提供setter方法;

    b) servlet中不能自己创建service对象, 应该从Spring容器中取对象, 否则会报空指针.

    c) 可以配置监听器实现配置文件的加载优化Servlet的代码

    <!-- 全局配置参数, 指定Spring配置文件的位置 -->

    <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>classpath:applicationContext.xml</param-value>

    </context-param>

    <!-- 配置Spring的监听器 -->

    <listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

    @WebServlet("/student")

    public class StudentServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    private StudentService studentService;

    @Override

    public void init() throws ServletException {

    ApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());

    studentService = context.getBean("studentService", StudentServiceImpl.class);

    }

    @Override

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    List<Student> list = studentService.selAll();

    req.setAttribute("list", list);

    req.getRequestDispatcher("/student.jsp").forward(req, resp);

    }

    }

  • 相关阅读:
    从源代码解释Android事件分发机制
    怎样让oracle实验本在不做实验时性能提升——win7下举例
    could only be replicated to 0 nodes, instead of 1
    虚拟机和主机ping不通解决的方法
    ZOJ3623:Battle Ships(全然背包)
    Android 网络编程之---HttpClient 与 HttpURLConnection 共用cookie
    注冊成为Windows Phone开发人员而且解锁Windows Phone 8.1手机
    sharding-method首页、文档和下载
    rootsongjc/kubernetes-handbook: Kubernetes中文指南/实践手册
    如何基于K8S打造轻量级PaaS平台
  • 原文地址:https://www.cnblogs.com/bjsxt123/p/9240801.html
Copyright © 2020-2023  润新知