【Java企业级开发】(七)Spring框架

一、初识Spring

Spring介绍

(1)对比以往项目,Spring优势有哪些:方便解耦,简化开发;AOP切面编程;声明式事务;整合各种优秀的框架;

(2)发明者:Rod Johnson(罗宾·约翰逊 )—Java世界的传奇大师,神级人物;Spring FrameWork的缔造者;旷世奇书“葵花宝典”《Expert one on one J2EE Design and Development》作者;Servlet2.4和JDO2.0的规范专家;Java Development Community杰出人物。

(3)不重复造轮子;

(4)使用Spring所需jar包

(5)Spring官网:

Spring | HomeLevel up your Java code and explore what Spring can do for you.https://spring.io/1.2 Spring的模块

二、Spring IOC/DI

Spring IOC/DI介绍

         IOC(Inversion of Control)中文名称:控制反转,也被称为)DI(dependency injection);依赖注入。注意:属于同一件事情的两个名称。

        创建对象的权利,或者是控制的位置,由JAVA代码转移到spring容器,由spring的容器控制对象的创建,就是控制反转。

        由于控制反转改建比较含糊,所以在2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,想对于IoC而言,“依赖注入”明确描述了“被注入对象依赖IoC容器来配置依赖对象”,DI(中文名为依赖注入)是IoC的别名。

三、创建第一个Spring项目

3.1 创建项目,添加依赖

        创建普通Maven项目,在项目的pom.xml中添加Spring项目的最基础依赖。

Spring项目想要运行起来必须包含:

  • spring-context.jar - 它依赖了下面的四个jar
    • spring-core.jar - 它依赖了spring-jcl.jar
      • spring-jcl.jar
    • spring-aop.jar
    • spring-expression.jar
    • spring-bean.jar

        所以在Maven中想要使用Spring框架只需要在项目中导入spring-context就可以了,其他的jar包根据Maven依赖传递性都可以导入进来。

pom.xml

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

3.2 创建一个类

3.3 创建Spring配置文件

要去Spring官网找到xml配置文件的文档头和约束部分

Container Overview :: Spring Frameworkhttps://docs.spring.io/spring-framework/reference/core/beans/basics.html

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
		https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--    构建Book对象-->
    <bean id="b" class="com.spring.pojo.Book"></bean>
</beans>

3.4 创建测试类

package com.study.test;

import com.spring.pojo.Book;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[] args) {
        // 创建Spring容器:
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 获取对象
        Book book = (Book)context.getBean("b");
        // 打印对象的信息
        System.out.println(book.getName() + " ---- " + book.getId());
    }
}

四、属性注入

4.1 属性注入方式

        以前不适用Spring的时候有两种属性注入方式

4.2 属性注入-设值注入

         直接在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
		https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--    构建Book对象-->
    <bean id="b" class="com.spring.pojo.Book">
        <!--设值注入-->
        <property name="id" value="1"></property>
        <property name="name" value="小张学Java"></property>
    </bean>
</beans>

4.3 属性注入-构造注入

        构造注入:这里的name要和有参构造器的参数一致4.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
		https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--    构建Book对象-->
    <bean id="b" class="com.spring.pojo.Book">
        <!--构造注入:这里的name要和有参构造器的参数一致-->
        <constructor-arg name="id" value="2"></constructor-arg>
        <constructor-arg name="name" value="小张学Java"></constructor-arg>
    </bean>
</beans>

4.4 属性注入-引用数据类型

(1)创建两个对象:Girl和Boy,Girl中有Boy对象以及他的getter和setter方法(模拟复杂数据类型)

(2)创建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
		https://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--①先构建boy对象-->
    <bean id="boy" class="com.spring.pojo.Boy">
        <property name="age" value="22"></property>
        <property name="name" value="小帅"></property>
    </bean>
    <!--②传参-->
    <bean id="girl" class="com.spring.pojo.Girl">
        <property name="age" value="19"></property>
        <property name="name" value="露露"></property>
        <property name="boyFriend" ref="boy"></property>
    </bean>
</beans>

(3)创建测试类,验证传参

package com.study.test;

import com.spring.pojo.Girl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test3 {
    public static void main(String[] args) {
        // 创建Spring容器:
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 获取对象
        Girl g = (Girl)context.getBean("girl");
        System.out.println("女孩名字:"+g.getName()+",女孩男朋友的名字是"+g.getBoyFriend().getName());
    }
}

五、注解

5.1 什么是注解

         注解其实就是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用注解,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充详细。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。

5.2 注解的使用

        使用注解时要在其前面增加@符号,并把该注解当成一个修饰符使用。用于修饰他支持的程序元素(包、类、构造器、方法、成员变量、参数、局部变量的声明)。

5.3 注解的重要性

        在JavaSE中,注解的使用比较简单,例如标记过时的功能,忽略警告等。在JavaEE/AeIdroid中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。未来的开发模式都是基于注解的。一定程度上可以说:框架=注解+反射+设计模式

5.4 Ioc/DI相关的注解

注解名称解释
这几个注解的用法跟@Component用法基本一样,只是用的地方不同@Component实例化Bean,默认名称为类名首字母变小写。无需指定setter方法
@Repository

作用和@Component一样,用在持久层

@Service作用和@Component一样,用在业务层
@Controller作用和@Component一样,用在控制器层
@Configuration作用和@Component一样,用在配置类上
@Autowired自动注入。默认byType,如果多个同类型bean,使用byName
@Value给普通数据类型属性赋值

        前五个注解作用一样,之所有搞出这么多,就是在语义上进行区分,放入不同层用不同的注解(@Component可以放在任何层级),但是作用都是创建对象。

5.5 @Component的使用

        (1)在要创建对象的类中加入@Component注解,对象名称默认为:类名首字母变小写

        (2)注解在哪个包下?要想找到这些注解,需要奖注解所在的包进行扫描:设置需要扫描的包。并且在applicationContext.xml中添加context命名空间。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
		https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context
		https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.spring.pojo"></context:component-scan>
</beans>

        (3)获取对象示例

package com.study.test;

import com.spring.pojo.Girl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test3 {
    public static void main(String[] args) {
        // 创建Spring容器:
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 获取对象
        Girl g = (Girl)context.getBean("girl");
        System.out.println("女孩名字:"+g.getName()+",女孩男朋友的名字是"+g.getBoyFriend());
    }
}

// 这里只是获取到了构建的对象,对象中属性的值并没有注入,所以拿到的都是默认值

5.6 通过注解给对象属性赋值

(1)@Value的使用

        给普通数据类型赋值的注解,普通数据类型包括:八种基本数据类型+String

  • 基本数据类型:6种数字类型(byte/short/int/long/float/double)、1种字符型(char)、1种布尔型(boolean

(2)@Autowired的使用

        添加@Autowired注解后会把容器中的对象自动注入进来,并且不需要依赖set方法

第一步
第二步

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值