Spring(1)(基础)

版本:idea2020.1.1    jdk1.8   maven3.6.3

注:本文章摘自Java EE企业级应用开发教程,黑马程序员/编著,仅用于记录学习笔记,分享学习经历。

一、Spring体系结构

Data Access/Integration:JDBC、ORM、OXM、JMS、Transactions

Web:WebSocket、Servlet、Web、Portlet

AOP

Aspects

Instrumentation

Messaging

Core Container:Beans、Core、Context、SpEL

Test

二、Spring基础包(一般导入maven依赖,请自行百度)

spring-core:包含Spring核心工具类,其他组件都需要用这个包里的类。

spring-beans:访问配置文件,创建和管理bean进行IOC和DI操作相关的所有类。

spring-context:IOC功能上的扩展服务,提供了许多企业级服务,如邮件、任务调度、JMDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等。

spring-expression:定义了Spring的表达式语言(学习点击链接
                                一、基本表达式:字面量表达式、关系,逻辑与算数运算表达式、字符串连接及截取表达式、三目运算及Elivis表达式、正则表达                                           式、括号优先级表达式;
                                二、类相关表达式:类类型表达式、类实例化、instanceof表达式、变量定义及引用、赋值表达式、自定义函数、对象属性存取及                                           安全导航表达式、对象方法调用、Bean引用;
                                三、集合相关表达式:内联List、内联数组、集合,字典访问、列表,字典,数组修改、集合投影、集合选择;不支持多维内联数                                           组初始化;不支持内联字典定义;
                                四、其他表达式:模板表达式。
                                注:SpEL表达式中的关键字是不区分大小写的。

commons.logging:第三方依赖包。

三、Spring核心容器

1、BeanFactory:是基础的IOC容器,BeanFactory是一个管理Bean的工厂,主要负责初始化各种Bean,并调用它们的声明周期方法。

创建BeanFactory实例(不常用):

BeanFactory beanFactory = XmlBeanFactory(new FileSystemResource("applicationContext.xml的绝对路径"));

2、ApplicationContext:是BeanFactory的子接口,包含了BeanFactory的所有功能,还添加了对国际化、资源访问、事件传播、等方面的支持。

创建ApplicationContext实例:

(1)、从类路径classPath中训中指定的XML配置文件

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

(2)、从绝对路径寻找配置文件(不常用)

ApplicationContext applicationContext = new FileSystemXmlApplicationContext("applicationContext.xml的绝对路径");

在web项目时,ApplicationContext的实例化工作交由web服务器完成,通常会使用ContextLoaderListener实现的方式,在web.xml文件编写以下内容即可。

<!-- 指定Spring配置文件的位置,多个配置文件时,以逗号分隔 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
<!--Spring将加载spring目录下的applicationContext.xml文件 -->
    <param-value>classpath:spring/applicationContext.xml</param-value>
  </context-param>
<!--指定以ContextLoaderListener方式启动Spring容器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

创建Spring容器后就可以获取Spring容器中的Bean

(1)、Object getBean(String name):根据容器中Bean的id或name来获取指定的Bean,获取之后需要进行强制类型转换。

(2)、<T>T getBean(Class<T> requiredType):根据类的类型来获取Bean的实例,由于此方法为泛型方法,因此在获取Bean后不需要强制类型转换。

BeanFactory和ApplicationContext的区别:BeanFactory加载后,第一次调用getBean()方法时会抛出异常,而ApplicationContext则在初始化时自检,有利于检查所依赖属性是否注入。

四、Spring测试(这里以maven项目为例)

目录结构:

1.建立一个maven项目,参考:https://blog.csdn.net/qq_44759192/article/details/114296147?spm=1001.2014.3001.5501

2.添加maven依赖,在pom.xml文件中添加

<!-- Spring核心依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>

    <!-- Spring dao依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>

    <!-- Spring web依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>

    <!-- Spring test依赖:方便做单元测试和集成测试 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>

    <!-- 一共四个方面:
         1)spring核心依赖
          spring-core、spring-beans、spring-context

         2)spring dao依赖(提供JDBCTemplate)
          spring-jdbc、spring-tx

         3)spring web依赖
          spring-web、spring-webmvc

         4)spring test依赖
          spring-test
     -->

3.建立UserDao接口与其实现类

public interface UserDao {
    public void say();
}
public class UserDaoImpl implements UserDao {
    @Override
    public void say() {
        System.out.println("userDao say hello World!");
    }
}

4.添加配置文件applicationContext.xml

<?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-4.3.xsd">
    <!-- 将指定类配置给 Spring,让Spring创建其对象的实例 -->
    <bean id="userDao" class="com.jc.dao.impl.UserDaoImpl" />
</beans>

5.编写测试类

public class Test1 {
    public static void main(String[] args) {
        //1.初始化spring容器,加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.通过容器获取userDao实例
        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
        //3.调用实例中的say()方法
        userDao.say();
    }
}

五、依赖注入

Dependency Injection 简称DI,与控制反转IOC含义相同,是从不同角度描述同一概念。

依赖注入的实现:(1)、属性setter方法注入:通过无参构造器或无参静态工厂方法实例化Bean后,调用该Bean的setter方法,即可实现基于setter方法                                         的依赖注入

                             (2)、构造方法注入,基于构造方法的依赖注入,通过调用带参构造方法实现,每一个参数代表一个依赖。

以setter方法实现:

目录结构:

①创建userService接口和实现类

public interface UserService {
    public void say();
}
public class UserServiceImpl implements UserService {
    //1.声明UserDao属性
    private UserDao userDao;
    //2.添加UserDao属性的setter方法,用于实现依赖注入
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    //3.实现接口中的方法
    @Override
    public void say() {
        //4.调用userDao中的say()方法,并执行输出语句
        userDao.say();
        System.out.println("userService say hello World !");
    }
}

②编辑applicationContext添加bean

<bean id="userService" class="com.jc.service.impl.UserServiceImpl">
        <!-- 将id为userDao的Bean实例注入到userService实例中 -->
        <property name="userDao" ref="userDao"/>
</bean>

③测试

public class Test2 {
    public static void main(String[] args) {
        //1.初始化spring容器,加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2.通过容器获取UserService实例
        UserService userService = (UserService) applicationContext.getBean("userService");
        //3.调用实例中的say方法
        userService.say();
    }
}

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值