今日知识

1. Spring IOC控制反转(Inverse of control)
2. Spring DI依赖注入(Dependency Injection )

Spring

1. 概念:简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
2. Spring好处:
1. 方便解耦,简化开发: Spring就是一个大工厂,专门负责生成Bean,可以将所有对象创建和依赖关系维护由Spring管理
2. AOP编程的支持:
3. 申明事务的支持:只需要通过配置就可以完成对事务的管理,而无需手动编程
4. 方便程序测试:Spring对Junit4支持,可以通过注解方便的测试Spring程序
5. 方便集成各种优秀框架: Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的支持
6. 降低javaAPI的使用的难度Spring: 对JavaEE开发中一些难用的API(JDBC、JavaMail、远程调webservice用等),都提供了封装,使这些API应用难度大大降低

IOC

1. 概念:所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。
所有的类的创建、销毁都由spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。
对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

DI依赖注入

1. 谁依赖了谁:应用程序依赖于IoC容器
2. 为什么要依赖:应用程序需要IoC容器来提供对象需要的外部资源
3. 谁注入谁:IoC容器注入应用程序某个对象,应用程序依赖的对象
4. 注入了什么:注入某个对象所需要的外部资源(包括对象、资源、常量数据)

IOC/DI入门案例

1. 导包:5+1四个核心一个依赖(spring5多一个)
* <dependency>
* <groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
* </dependency>
2. 新建类
3. 配置文件
4. 测试

装配Bean(xml)

1. 实例化Bean的三种方式
1. 使用构造方法实例化
* <!-- 第一种方式: new 实现类-->
<bean id="userService1" class="com.gyf.service.UserServiceImpl"></bean> * public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans3.xml"); //new 对象
//IUserService userService1 = (IUserService) context.getBean("userService1");
//userService1.add(); 2. 使用静态工厂方法实例化
* <!-- 第二种方式:通过静态工厂方法
spring的版本过低,3.0版本,把jdk改成1.7
-->
<bean id="userService2" class="com.gyf.service.UserSereviceFactory1" factory-method="createUserService"></bean>
//静态工厂
//IUserService userService2 = UserSereviceFactory1.createUserService();
//IUserService userService2 = (IUserService) context.getBean("userService2");
//userService2.add(); 3. 使用实例工厂方法实例化
* <!--第三种方式:通过实例工厂方法 -->
<!-- 创建实例factory2 bean-->
<bean id="factory2" class="com.gyf.service.UserSereviceFactory2"></bean> <bean id="userService3" factory-bean="factory2" factory-method="createUserService"></bean>
2. Bean的作用域
1. singleton:
* 在Spring IoC容器中仅存在一个Bean实例,Bean以单例方式存在,默认值
2. prototype:
* 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时 ,相当于执行new XxxBean()
3. request
* 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境
4. session
* 同一个HTTP Session 共享一个Bean,不同Session使用不同Bean,仅适用于WebApplicationContext 环境
5. globalSession
* 一般用于Portlet应用环境,该作用域仅适用于WebApplicationContext 环境

依赖注入Bean属性(xml)

1. 手动装配,使用xml配置
1. 构造方法注入
2. 属性setter方法注入
2. 集合注入
1. 集合类型
集合的注入都是给<property>添加子标签
数组:<array>
List:<list>
Set:<set>
Map:<map> ,map存放k/v 键值对,使用<entry>描述
Properties:<props> <prop key=""></prop> 【】
JavaBean:对象注入,依赖<bean>标签注入
普通数据:<value>
引用数据:<ref>
2. 实例
3. <bean id="user" class="com.rqy.bean.User">
<property name="arrays">
<array>
<value>123</value>
<value>456</value>
</array>
</property>
<property name="users" >//存放对象
<list>
<bean class="com.cskaoyan.bean.User">
<property name="username" value="user1"/>
<property name="password" value="password1"/>
</bean>
<ref bean="secondUserInlist"/>
</list>
</property>
<property name="lists">
<list>
<value>123</value>
<value>456</value>
</list>
</property>
<property name="sets">
<set>
<value>123</value>
<value>456</value>
</set>
</property>
<property name="maps">
<map>
<entry key="1" value="123"/>
<entry key="2" value="456"/>
</map>
</property>
<property name="properties">
<props>
<prop key="1">123</prop>
<prop key="2">456</prop>
</props>
</property>
</bean>
3. 注解注入
1. 注解:就是一个类,使用@注解名称
2. 开发中:使用注解 取代 xml配置文件。
3. @Component 取代<bean class="">
4. @Component("id") 取代 <bean id="" class="">
5. web开发,提供3个@Component注解衍生注解(功能一样)取代<bean class="">
* @Repository(“名称”):dao层
* @Service(“名称”):service层
* @Controller(“名称”):web层
* @Autowired:自动根据类型注入
* @Qualifier(“名称”):指定自动注入的id名称
* @Resource(“名称”)
* @ PostConstruct 自定义初始化
* @ PreDestroy 自定义销毁
6. @Component
public class UserDaoImpl implements UserDao{
public String selectPasswordByName(String name) {
if ("zhangsong".equals(name))
{
return "jiaochunidemima";
}
return "ok";
}
}
@Component
public class UserServiceImpl implements UserService {
@Autowired
UserDao userDao; public String queryPasswordByUsername(String name) {
return userDao.selectPasswordByName(name);
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:application.xml")
public class mytest {
@Autowired
UserService userService;
@Resource(name="user1")
User user;
@Test
public void test(){
String s = userService.queryPasswordByUsername("123");
System.out.println(s);
}
}

04-Spring01-IOC的更多相关文章

  1. 04.Spring Ioc 容器 - 刷新

    基本概念 Spring Ioc 容器被创建之后,接下来就是它的初始化过程了.该过程包含了配置.刷新两个步骤 . 刷新由 Spring 容器自己实现,具体发生在 ConfigurableApplicat ...

  2. 04 Spring:01.Spring框架简介&&02.程序间耦合&&03.Spring的 IOC 和 DI&&08.面向切面编程 AOP&&10.Spring中事务控制

    spring共四天 第一天:spring框架的概述以及spring中基于XML的IOC配置 第二天:spring中基于注解的IOC和ioc的案例 第三天:spring中的aop和基于XML以及注解的A ...

  3. Spring IOC 源码简单分析 04 - bean的初始化

      ### 准备 ## 目标 了解 Spring 如何初始化 bean 实例 ##测试代码 gordon.study.spring.ioc.IOC04_Initialization.java publ ...

  4. Java开发工程师(Web方向) - 04.Spring框架 - 第2章.IoC容器

    第2章.IoC容器 IoC容器概述 abstract: 介绍IoC和bean的用处和使用 IoC容器处于整个Spring框架中比较核心的位置:Core Container: Beans, Core, ...

  5. Spring-01 注解实现IOC

    Spring框架四大原则 使用pojo进行轻量级和最小侵入式开发. 通过依赖注入和基于接口编程实现松耦合. 使用AOP和默认习惯进行声明式编程. 使用AOP和模板(template)减少模式化代码. ...

  6. Spring01——你应该了解的,有关 IOC 容器的一切

    从本文开始,将开始介绍关于 Spring 的一些常见知识点.关注我的公众号「Java面典」,每天 10:24 和你一起了解更多 Java 相关知识点. 在如今的 Java Web 开发中,Spring ...

  7. Spring源码 04 IOC XML方式

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...

  8. Spring 04: IOC控制反转 + DI依赖注入

    Spring中的IOC 一种思想,两种实现方式 IOC (Inversion of Control):控制反转,是一种概念和思想,指由Spring容器完成对象创建和依赖注入 核心业务:(a)对象的创建 ...

  9. Spring----01. 入门知识,IoC/DI

    1.spring两个最基本概念:依赖注入DI.面向切面AOP 2.spring通过上下文Application Context装配bean,实现方式的区别是如何加载它们的配置信息, ClassPath ...

  10. Spring的IOC和AOP之深剖

    今天,既然讲到了Spring 的IOC和AOP,我们就必须要知道 Spring主要是两件事: 1.开发Bean:2.配置Bean.对于Spring框架来说,它要做的,就是根据配置文件来创建bean实例 ...

随机推荐

  1. 【GeneXus】开发移动APP时,如何使用Canvas进行布局?

    当我们开发移动端APP的时候,经常遇到一种布局方式,那就是层级的布局,比如:一张照片我想在照片的上面显示它的名称,但不影响我照片展示的布局大小,也就是这个名称是浮在照片上的,如图: 如果要实现这样的布 ...

  2. 序言vue.js介绍

    vue.js :渐进式JavaScript框架 vue.js 优点 1.体积小 例如:压缩后 33k; 2.更高的运行效率 基于虚拟dom,一种可以预先通过JavaScript进行各种计算,把最终的D ...

  3. net 自带cache

    using System.Web.Caching; Cache cache = new Cache();

  4. stars-one原创工具——蓝奏云批量下载工具

    一款可以批量下载蓝奏云分享的文件夹下的所有文件 基于HtmlUnit和okhttp开源库,所以打包后的jar包文件有点大 蓝奏云下载地址 github地址 需求 之前找电子书资源的时候,网友分享的蓝奏 ...

  5. 菜鸟学习Fabric源码学习 — kafka共识机制

    Fabric 1.4源码分析 kafka共识机制 本文档主要介绍kafka共识机制流程.在查看文档之前可以先阅览raft共识流程以及orderer服务启动流程. 1. kafka 简介 Kafka是最 ...

  6. chrome最耐看的主题

    google chrome最耐看的主题James White大家可以尝试一下

  7. 【WPF学习】第十七章 键盘输入

    当用户按下键盘上的一个键时,就会发生一系列事件.下表根据他们的发生顺序列出了这些事件: 表 所有元素的键盘事件(按顺序) 键盘处理永远不会像上面看到的这么简单.一些控件可能会挂起这些事件中的某些事件, ...

  8. 【中文乱码】深入分析 Java Web 中的中文编码问题

    深入分析 Java Web 中的中文编码问题 1.几种常见的编码格式 1.1 为什么要编码 在计算机中存储信息的最小单元是 1 个字节,即 8 个 bit, 所以能表示的字符范围是 0 ~ 255 个 ...

  9. 个人第四次作业AIpha2版本测试(最终版)

    这个作业属于哪个课程 软件工程 作业要求在哪里 作业要求 团队名称 RainbowPlan团队博客 这个作业目标 手动测试非本团队的小组程序,是否可以正常登录,正常运行 一.测试人员信息 测试人员 姓 ...

  10. 【模板】普通平衡树(权值splay)

    安利splay讲解: [洛谷日报第62期]Splay简易教程 [模板]普通平衡树(luogu) Description 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下 ...