• 1 Spring?
  • 2 IOC案例
    • 2.1 配置文件方法
    • 2.2 注解方法
    • 2.3 配置文件与注解一起使用
  • 3 代码案例可参考:

更多Spring开发在框架开发


1 Spring?

Spring是开源的轻量级框架,也是一站式框架,即在javaEE三层结构中,每一层都提供了不同的解决技术:层-SpringMVC ; 业务层-ioc ; 持久层-jdbcTemplate 。

Spring技术的两大核心:

  • IOC : 控制反转 , 用spring代替传统的new方法创建对象
  • AOP: 面向切面编程,扩展的功能不通过修改源码来实现。

本文案例先讲述IOC的具体应用

2 IOC案例

关于IOC: ioc是spring的两大核心之一,目的是避免new的方式创建类对象,而类创建过程中对类中属性的赋值则是注入属性 ,IOC有两种方式:

  • 配置文件的方式: 在XML中进行配置关联有关的类以及注入属性
  • 注解的方式: 利用注解的方式直接在类的源代码上进行操作

而一般情况下,我们习惯用配置文件+注解的方式

案例目标: User类和Work类,Test类不再使用new的方式创建对象,而是使用IOC的方式进行创建User类,并且实现注入属性的演示

项目环境: 导入jar包

本文使用Spring4.x版本,导入Spring基本包和日志相关jar包:

在测试2.2 注解的方式时,还需要提供spring-aop-4.2.4.RELEASE.jar

2.1 配置文件方法

User类,属性注入需要提供set方法,User类提供字符串属性和对象属性

package edu.kmust.entity;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/*** 实体类* @author zhaoyuqiang**/
public class User {private String username ;  //字符串类型private Work work ; //对象类型public String getUsername() {return username;}//必须提供set方法public void setUsername(String username) {this.username = username;}public Work getWork() {return work;}public void setWork(Work work) {this.work = work;}
}

Work类

package edu.kmust.entity;
import org.springframework.stereotype.Service;
public class Work {/*** 添加用户*/public void add() {System.out.println("添加用户的操作......");}
}

Spring核心配置文件,名称建议用applicationContext.xml,位置建议src下。

<?xml version="1.0" encoding="UTF-8"?>
<!--导入schema约束,在spring-framework-4.2.4.RELEASE-dist/spring-framework-4.2.4.RELEASE/docs/spring-framework-reference/html目录下的xsd-configuration.html里面有该约束-->
<!-- 配置文件的方式引入的约束 -->
<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"><!-- 1.创建对象bean:id : 创建对象的名字(可以任意起名,不能包含下划线等特殊符号)class: 创建对象所在类的全路径scope: 配置单例或多例singleton: 单例,通过IOC获取的对象都是同一个对象prototype:多例,通过IOC获取的对象是不同的对象,一般用在struts2的action中--><bean id="work" class="edu.kmust.entity.Work" ></bean><bean id="user" class="edu.kmust.entity.User" scope="singleton"><!-- 2.1 属性注入: 字符串 name: 类属性名字value: 属性值--><property name="username" value="黄思"></property><!--2.2属性注入:对象需要创建 注入对象workname: 类的对象属性的名字ref:  注入对象的bean标签的id值            --><property name="work" ref="work"></property></bean>
</beans>

测试类,User类通过ioc创建,并且测试了属性有没有注入

@Testpublic void test01() {/** 1.加载spring配置文件,根据配置文件创建*     org.springframework.context.ApplicationContext对象* 2. 用IOC的方式获取对象     */ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");User user = (User) context.getBean("user");System.out.println(user.getUsername());user.getWork().add(); //不用new的方式就能调用其他类的方法,通常用在service调用dao中}

2.2 注解方法

User,使用注解方法创建对象,注入属性,不需要提供set方法

package edu.kmust.entity;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/*** 实体类* @author zhaoyuqiang**/
/** 1.创建对象的注解Component/Controller/Service/Repository四个都可以*     类似于配置文件方式中的<bean:id="user" class="">*     value=“user”可以写成"user"*     Scope配置单/多例*/
@Component(value="user")
@Scope(value="prototype")
public class User {/** 2. 属性注入的注解*     @Autowired*     @Resource(name="注入对象的注解value值(另一个对象的Service注解的value值)")*/@Value("黄思")private String username ;  //字符串类型@Resource(name="work")private Work work ; //对象类型public String getUsername() {return username;}public Work getWork() {return work;}
}

Work

package edu.kmust.entity;
import org.springframework.stereotype.Service;
/*** 注入对象* @author zhaoyuqiang**/
@Service(value="work")
public class Work {/*** 添加用户*/public void add() {System.out.println("添加用户的操作......");}
}

配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 在beans约束的基础上,再导入context约束 -->
<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 http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here --><!-- 开启注解扫描到包里面扫描类、方法、属性上是否有注解context:component-scan:base-package: 要扫描的包的名字,如果有多个包,用逗号隔开,或者取共同部分,如edu.kmust--><context:component-scan base-package="edu.kmust.entity"></context:component-scan>
</beans>

2.3 配置文件与注解一起使用

配置文件用来创建对象,注解方法用来注入属性

User

package edu.kmust.entity;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;/*** 实体类* @author zhaoyuqiang**/
public class User {@Value("黄思")private String username ;  //字符串类型@Resource(name="work")private Work work ; //对象类型public String getUsername() {return username;}public Work getWork() {return work;}
}

Work

package edu.kmust.entity;
import org.springframework.stereotype.Service;
/*** 注入对象* @author zhaoyuqiang**/
public class Work {/*** 添加用户*/public void add() {System.out.println("添加用户的操作......");}
}

配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--beans+context约束-->
<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 http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here --><!--创建对象  --><bean id="work" class="edu.kmust.entity.Work" scope="singleton"></bean><bean id="user" class="edu.kmust.entity.User"></bean><!-- 开启注解扫描到包里面扫描类、方法、属性上是否有注解context:component-scan:base-package: 要扫描的包的名字,如果有多个包,用逗号隔开,或者取共同部分,如edu.kmust--><context:component-scan base-package="edu.kmust.entity"></context:component-scan><!-- 只扫描属性 --><!--<context:annotation-config></context:annotation-config>-->
</beans>

3 代码案例可参考:

https://download.csdn.net/download/g425680992/10651876

Spring4.x❶ 两大核心之IOC相关推荐

  1. spring框架两大核心:IOC和AOP的详解

    目录 一.IOC和AOP的介绍 二.IOC 1.IOC初始化属性的方式 1.使用构造方法完成属性初始化 2.使用type数据类型完成属性初始化 3.使用p命名空间初始化对象 4.使用c命名空间初始化对 ...

  2. Java轻量级业务层框架Spring两大核心IOC和AOP原理

    IoC(Inversion of Control): IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些 ...

  3. java spring原理详解,spring原理详解,两大核心IOC和AOP

    大家好,我是java梦之旅,一个被Bug耽误了才艺的程序员,专注于Java领域的知识分享和技术交流,每天会给大家带来Java学习的干货教程,喜欢我的同学可以关注我,一起学习,一起加油! 1.概念:sp ...

  4. 深入理解Spring两大特性:IoC和AOP

    Spring Boot 专栏:https://blog.csdn.net/dkbnull/category_9278145.html Spring Cloud 专栏:https://blog.csdn ...

  5. Spring框架两大核心特征的基本理解

    Spring框架的两大核心特征:AOP和IoC IoC(控制反转)是Spring的一个容器,他不是一种技术,而是一种思想,依旧是基于面向对象编程的.它能指导我们怎么样设计出松耦合.更优良的程序. 简单 ...

  6. Spring框架的两大核心思想

    Spring框架的两大核心思想 简介:Spring 的主要作用就是为代码"解耦",降低代码间的耦合度.就是让对象和对象(模 块和模块)之间关系不是使用代码关联,而是通过配置来说明. ...

  7. 游戏行业两大核心问题:数据挖掘与安全

    4月19-21日的2016云栖大会深圳峰会,有前沿技术深度分享.Workshop阿里云开放实验室.行业企业聚会.Tech Insight实战干货,更有20+场分论坛,120+高浓度实战演讲,100+阿 ...

  8. hadoop的两大核心之一:HDFS总结

    2019独角兽企业重金招聘Python工程师标准>>> hadoop的两大核心之一 海量数据的存储(HDFS) 什么是HDFS? hadoop distributed file sy ...

  9. 【JAVAEE框架】浅谈 Spring 框架的两大核心思想 AOP 与 IOP

    哈喽~大家好呀,这篇来看看Spring 框架的两大核心思想.

最新文章

  1. R语言数据包自带数据集之ToothGrowth数据集字段解释、数据导入实战
  2. The NVIDIA driver on your system is too old
  3. NEO从源码分析看NEOVM
  4. jQuery调用其他JS文件中的方法
  5. 【已解决】javaweb新建jsp文件报错
  6. jakarta ee_MicroProfile在Jakarta EE时代的作用
  7. tensorflow学习笔记(1):sess.run()
  8. java sql merge_sql merge用法
  9. flask 启动服务
  10. 最近完成的一个可伸缩性的WEB开发框架
  11. C语言函数程序实例(超全)
  12. java+poi在Excel中生成二维码
  13. 使用 Sublime开发 Jade
  14. jvm System.gc()说明
  15. POJ1759Garland题解
  16. 区块链ICO是什么意思?回答所有你关于ICO的问题
  17. 隧道测量快速坐标反程序48004850计算器
  18. 黑苹果 Monterey wifi 蓝牙驱动 AX系网卡 解决方案
  19. 禁用键盘快捷键_如何在Windows中使用键盘快捷键临时禁用键盘
  20. idea几款好用的插件

热门文章

  1. c++ 类 const成员函数重载
  2. HDU - 4507 吉哥系列故事――恨7不成妻 (数位DP)
  3. 安装武器(pycharm,Anaconda)
  4. linux安装node环境
  5. wangEditor上传本地视频
  6. python基础技巧(三)——tf
  7. Linux实验---多文件编程Makefile实验二
  8. java volatile内存屏障_从汇编看Volatile的内存屏障
  9. 使用小程序做交互的技巧(演讲内容实录)丨掘金开发者大会
  10. Go语言自学系列 | golang函数的返回值