java EE 企业级应用开发教程-------阅读笔记1

目录

spring概述

什么是spring

spring框架的优点

spring的体系结构

Spring快速入门小程序

Spring配置文件详解

 Spring依赖注入详解

依赖注入概念

实现注入的方式

博客声明


spring概述

什么是spring

Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson的程序员在 2002 年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架 。致力于java EE 应用各层的解决方案  。

spring框架的优点

  • 非侵入式设计
  • 方便解耦、简化开发
  • 支持AOP]
  • 支持声明式事务处理
  • 方便程序的测试
  • 方便集成各种优秀框架
  • 降低javaEEAPI的开发难度

spring的体系结构

Spring框架采用的是分层结构,他的一系列功能要素备份为20各模块,如图所示

 Core Container---核心容器

Data Accree/Integraion---数据访问/集成

web---                text---测试

Spring快速入门小程序

1.maven方式建立项目导入坐标

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>
    </dependencies>

2.创建Bean

3.创建applicationContext.xml

创建方式---新建xml---spring,文件内容自动形成

4.在配置文件中进行配置

​
<?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">
<!--为文件添加以下一句话,id随便,class填写bean类的全类名-->
    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
</beans>

​

5.创建ApplicationContext对象getBean

public class UserDaoDemo {
    public static void main(String[] args) {
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//        UserDao userDao = (UserDao) app.getBean("userDao");
        UserDao userDao = (UserDao) app.getBean("userDao");
        userDao.save();
    }
}

6.测试运行结果如下

Spring配置文件详解

1.Bean标签基本配置

配置对象可有spring创建,默认情况下调用类中无参构造函数,没有无参构造函数则创建失败

bean标签的作用域

singleton(单例):无论通过多少getBean获取的对象示例实际对象只有一个,

prototype(原型):每次通过getBean方法可获取对象示例时都会创建一个新的Bean实例

其他作用域----request---session---globalSession--websocket--application,具体见书籍

2.Bean的生命周期

        singleton,创建时机Spring核心文件被加载时,实例化配置的Bean实例,只要容器存在,对象便一直存活,应用卸载,销毁容器时对象被销毁,

         prototype:调用getBean()方法时实例化Bean,对象在使用时存活,长时间不使用,被Java的回收器回收

配置生命周期(了解)

        标签内使用  init-method=""配置初始化后执行的方法,destroy-method=""配置销毁后执行的方法

bean的三种实例化方式

无参构造方法实例化

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>

工厂静态方法实例化----factory-method指向工厂类中的创建的对象的方法

<bean id="StaticFactoryUserDao" class="com.itheima.factory.Factory" factory-method="creatBean"/>

工厂实例方法实例化-----factory-bean指向工厂类,使用前要先配置一个工厂类的bean,可以调用无参构造方法

​
<bean id="factory" class="com.itheima.factory.Factory"></bean>
<bean id="DynamicFactory" factory-bean="factory" factory-method="creatBean1"></bean>

​

工厂类的内容

public class Factory {
    public static UserDaoImpl creatBean() {
        return new UserDaoImpl();
    }

    public UserDaoImpl creatBean1() {
        return new UserDaoImpl();
    }
}

 Spring依赖注入详解

依赖注入概念

        依赖注入是指在程序运行过程中,如果需要调用另一个对象协助,无需在代码中创建被调用者,而是依赖外部的注入,具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。

        简单来说就是使用业务层Service对象时不用在创建一个持久层Dao对象,以为Dao对象的实例化工作已经由Spring完成了,我们只需Service对象里调用就可以了,减少代码的工作量以及耦合性,重构的之后代码的改写量将大量减少(定义来源于网络以及个人理解)

实现注入的方式

1.set方法注入

<!--set注入方式-->
    <bean id="setService" class="com.itheima.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property><!--name指get方法内部参数名,ref指容器内id-->
    </bean>
    <!--set的p命名空间注入,前提前面加入xmlns:p="http://www.springframework.org/schema/p"-->
    <bean id="setService_p" class="com.itheima.service.impl.UserServiceImpl" p:userDao-ref="userDao"></bean>

2.构造方法注入

<!--构造器注入方式-->
    <bean id="constructorService" class="com.itheima.service.impl.UserServiceImpl">
        <constructor-arg name="userDao" ref="userDao"></constructor-arg><!--name指构造方法内部参数名,ref指容器内id-->
    </bean>

3.其他数据类型注入

<!--以上为引用类型的注入的注入-->
    <!--以下为基本类型的注入-->
    <bean id="setService1" class="com.itheima.service.impl.UserServiceImpl">
        <property name="userName" value="userName"></property><!--name指get方法内部参数名,ref指容器内id-->
    </bean>
    <!--集合的注入-->
    <bean id="setService1" class="com.itheima.service.impl.UserServiceImpl">
        <property name="list" >
            <value>aaa</value>
            <value>bbb</value>
        </property><!--name指get方法内部参数名,ref指容器内id-->
    </bean>
    <bean id="setService1" class="com.itheima.service.impl.UserServiceImpl">
        <property name="map" >
            <map>
                <entry value-ref="userDao" key="userDao1"></entry><!--entry键值对这里引入了一个对象的值-->
            </map>
        </property><!--name指get方法内部参数名,ref指容器内id-->
        <!--properties注入方式-->
        <property name="properties">
            <props>
                <prop key="p1" >ppp</prop>
                <prop key="p2" >ppp</prop>
                <prop key="p3" >ppp</prop>
            </props>
        </property>
    </bean>

4注解方式注入

 原始注解表

注入测试

@Component("userService1")
@Scope("singleton")
public class UserServiceDemo implements UserService {

    @Resource(name = "userDao1")
    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    
    @Value("${jdbc.driver}")//根据引入的配置文件中的key注入值
    private String driver;
    
    @Override
    public void save() {
        userDao.save();
        System.out.println(driver);
    }
    
    public static void main(String[] args) throws SQLException {
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService bean = (UserService) app.getBean("userService1");
        bean.save();
    }
}

这仅仅是注解的初级使用,在Spring5更新新注解后完全可以使用注解代替配置文件来使用,详细见我后续学习文章

5引入其他配置文件

<import resource="applicataionContext-user.xml"/>

spring相关API的解释

App的三种实例化方式,即ApplicationContext的三个常用子类,以及getbean的俩种传参形式

ApplicationContext applicationContext = new FileSystemXmlApplicationContext("类根路径下加载文件");
ApplicationContext applicationContext1 = new ClassPathXmlApplicationContext("磁盘路径(绝对路径)下加载文件");
ApplicationContext applicationContext2 = new AnnotationConfigApplicationContext("使用注解配置容器对象时使用这个");
/*一般使用ClasspathXmlApplicationContext*/
applicationContext2.getBean("填写唯一ID");
applicationContext.getBean("填写UserService.class,使用于配置文件中只有相对应文件只有一种bean实例化方式时,注意现在不适用字符串参数");
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("类根路径下加载文件");
        ApplicationContext applicationContext1 = new ClassPathXmlApplicationContext("磁盘路径(绝对路径)下加载文件");
        ApplicationContext applicationContext2 = new AnnotationConfigApplicationContext("使用注解配置容器对象时使用这个");
        /*一般使用ClasspathXmlApplicationContext*/
        applicationContext2.getBean("填写唯一ID");
        applicationContext.getBean("填写UserService.class,使用于配置文件中只有相对应文件只有一种bean实例化方式时,注意现在不适用字符串参数");

博客声明

本博客阅读书籍为黑马程序员编写的java EE 企业级应用开发教程

配套视频为b站黑马程序员在2021-03-10发布的

黑马程序员最全SSM框架教程

仅仅作为学习笔记期末复习以及ssm框架实战使用

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值