今日知识

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

Spring

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

IOC

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

DI依赖注入

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

IOC/DI入门案例

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

装配Bean(xml)

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

依赖注入Bean属性(xml)

  1. 1. 手动装配,使用xml配置
  2. 1. 构造方法注入
  3. 2. 属性setter方法注入
  4. 2. 集合注入
  5. 1. 集合类型
  6. 集合的注入都是给<property>添加子标签
  7. 数组:<array>
  8. List:<list>
  9. Set:<set>
  10. Map:<map> map存放k/v 键值对,使用<entry>描述
  11. Properties:<props> <prop key=""></prop> 【】
  12. JavaBean:对象注入,依赖<bean>标签注入
  13. 普通数据:<value>
  14. 引用数据:<ref>
  15. 2. 实例
  16. 3. <bean id="user" class="com.rqy.bean.User">
  17. <property name="arrays">
  18. <array>
  19. <value>123</value>
  20. <value>456</value>
  21. </array>
  22. </property>
  23. <property name="users" >//存放对象
  24. <list>
  25. <bean class="com.cskaoyan.bean.User">
  26. <property name="username" value="user1"/>
  27. <property name="password" value="password1"/>
  28. </bean>
  29. <ref bean="secondUserInlist"/>
  30. </list>
  31. </property>
  32. <property name="lists">
  33. <list>
  34. <value>123</value>
  35. <value>456</value>
  36. </list>
  37. </property>
  38. <property name="sets">
  39. <set>
  40. <value>123</value>
  41. <value>456</value>
  42. </set>
  43. </property>
  44. <property name="maps">
  45. <map>
  46. <entry key="1" value="123"/>
  47. <entry key="2" value="456"/>
  48. </map>
  49. </property>
  50. <property name="properties">
  51. <props>
  52. <prop key="1">123</prop>
  53. <prop key="2">456</prop>
  54. </props>
  55. </property>
  56. </bean>
  57. 3. 注解注入
  58. 1. 注解:就是一个类,使用@注解名称
  59. 2. 开发中:使用注解 取代 xml配置文件。
  60. 3. @Component 取代<bean class="">
  61. 4. @Component("id") 取代 <bean id="" class="">
  62. 5. web开发,提供3@Component注解衍生注解(功能一样)取代<bean class="">
  63. * @Repository(“名称”):dao
  64. * @Service(“名称”):service
  65. * @Controller(“名称”):web
  66. * @Autowired:自动根据类型注入
  67. * @Qualifier(“名称”):指定自动注入的id名称
  68. * @Resource(“名称”)
  69. * @ PostConstruct 自定义初始化
  70. * @ PreDestroy 自定义销毁
  71. 6. @Component
  72. public class UserDaoImpl implements UserDao{
  73. public String selectPasswordByName(String name) {
  74. if ("zhangsong".equals(name))
  75. {
  76. return "jiaochunidemima";
  77. }
  78. return "ok";
  79. }
  80. }
  81. @Component
  82. public class UserServiceImpl implements UserService {
  83. @Autowired
  84. UserDao userDao;
  85. public String queryPasswordByUsername(String name) {
  86. return userDao.selectPasswordByName(name);
  87. }
  88. }
  89. @RunWith(SpringJUnit4ClassRunner.class)
  90. @ContextConfiguration("classpath:application.xml")
  91. public class mytest {
  92. @Autowired
  93. UserService userService;
  94. @Resource(name="user1")
  95. User user;
  96. @Test
  97. public void test(){
  98. String s = userService.queryPasswordByUsername("123");
  99. System.out.println(s);
  100. }
  101. }

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】在WorkWithPlus中如何定义未被包含的页面属性?

    在使用GeneXus开发项目的过程中,有很多用户会使用到WorkWithPlus这个模板.通过WorkWithPlus的编辑器,让页面的调整变得极为简单,尤其是响应式页面.在WorkWithPlus的 ...

  2. js正则定义支付宝账号、手机号、邮箱

    一.支付宝账号:可以只输入数字.字母.字母(数字)+数字(字母),其中只字母中可以含有@._或者.也可以三者都可以包含并且可以在任意位置,限制:小于等于30位(可根据需求自定义范围): let  zh ...

  3. cogs 3008. 朋友圈

    3008. 朋友圈 ★★   输入文件:friendscircle.in   输出文件:friendscircle.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] NO ...

  4. Fibnoccia 数列简单题

    In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. For example, ...

  5. OA系统、ERP系统、CRM系统的区别和联系有哪些?企业该如何使用?

    我们经常听到很多企业会花重金购买适合企业的ERP.OA和CRM系统,使得公司的管理运营更加高效有序,节省公司运营成本,带来更大的经济效益,但实际上很多人员都不太理解他们之间的区别和联系是什么,到底该如 ...

  6. 调试 ambari-server 总结

    刚开始debug ambari-server的时候,很多逻辑都是第一次接触.其中有很多知识点还是记录一下的好,做个备忘.这些知识点对于自定义api的开发还是很有作用的. 1. api的子href的最后 ...

  7. 造轮子-toast组件的实现(下)

    1.解决 toast 中传入 html 的问题,通过假的 slot 来实现 // plugins.js toast.$slots.default = [message] // toast.vue &l ...

  8. 个人任务day7

    今日计划: 整合程序,排除错误. 昨日成果: 写注册界面.

  9. LightningChart® .NET 8.5版重磅上线,新年特惠

    新年回馈用户 新年伊始,全球领先的数据可视化图表工具LightningChart®正式发布了.Net 8.5版本,新版软件在外观.功能和用户体验上都做了突破性的改进.LightningChart®同时 ...

  10. .Net Core建站(1):EF Core+CodeFirst数据库生成

    emmm,本来想着用Core做一个小项目玩玩的,然后肯定是要用到数据库的, 然后想,啊,要不用CodeFirst,感觉很腻害的样子,于是,一脸天真无邪的我就踏入了一个深不见底的天坑... 本来想着,应 ...