当前位置: 首页 > news >正文

spring的学习

 1 <!-- 配置一个 bean -->
 2     <bean id="helloWorld" class="com.atguigu.spring.helloworld.HelloWorld">
 3         <!-- 为属性赋值 -->
 4         <property name="user" value="Jerry"></property>
 5     </bean>
 6     
 7     <!-- 配置一个 bean -->
 8     <bean id="helloWorld2" class="com.atguigu.spring.helloworld.HelloWorld">
 9         <!-- 为属性赋值 -->
10         <!-- 通过属性注入: 通过 setter 方法注入属性值 -->
11         <property name="user" value="Tom"></property>
12     </bean>

 

    

   IOC:反转资源获取方向.

   DI:IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源注入。

 

 

 1 <!-- 通过构造器注入属性值 -->
 2     <bean id="helloWorld3" class="com.atguigu.spring.helloworld.HelloWorld">
 3         <!-- 要求: 在 Bean 中必须有对应的构造器.  -->
 4         <constructor-arg value="Mike"></constructor-arg>
 5     </bean>
 6     
 7     <!-- 若一个 bean 有多个构造器, 如何通过构造器来为 bean 的属性赋值 -->
 8     <!-- 可以根据 index 和 value 进行更加精确的定位. (了解) -->
 9     <bean id="car" class="com.atguigu.spring.helloworld.Car">
10         <constructor-arg value="KUGA" index="1"></constructor-arg>
11         <constructor-arg value="ChangAnFord" index="0"></constructor-arg>
12         <constructor-arg value="250000" type="float"></constructor-arg>
13     </bean>
14     
15     <bean id="car2" class="com.atguigu.spring.helloworld.Car">
16         <constructor-arg value="ChangAnMazda"></constructor-arg>
17         <!-- 若字面值中包含特殊字符, 则可以使用 DCDATA 来进行赋值. (了解) -->
18         <constructor-arg>
19             <value><![CDATA[<ATARZA>]]></value>
20         </constructor-arg>
21         <constructor-arg value="180" type="int"></constructor-arg>
22     </bean>

 

 

 

 1 <!-- 配置 bean -->
 2     <bean id="dao5" class="com.atguigu.spring.ref.Dao"></bean>
 3 
 4     <bean id="service" class="com.atguigu.spring.ref.Service">
 5         <!-- 通过 ref 属性值指定当前属性指向哪一个 bean! -->
 6         <property name="dao" ref="dao5"></property>
 7     </bean>
 8     
 9     <!-- 声明使用内部 bean -->
10     <bean id="service2" class="com.atguigu.spring.ref.Service">
11         <property name="dao">
12             <!-- 内部 bean, 类似于匿名内部类对象. 不能被外部的 bean 来引用, 也没有必要设置 id 属性 -->
13             <bean class="com.atguigu.spring.ref.Dao">
14                 <property name="dataSource" value="c3p0"></property>
15             </bean>
16         </property>
17     </bean>
18     
19     <bean id="action" class="com.atguigu.spring.ref.Action">
20         <property name="service" ref="service2"></property>
21         <!-- 设置级联属性(了解) -->
22         <property name="service.dao.dataSource" value="DBCP2"></property>
23     </bean>
24     
25     <bean id="dao2" class="com.atguigu.spring.ref.Dao">
26         <!-- 为 Dao 的 dataSource 属性赋值为 null, 若某一个 bean 的属性值不是 null, 使用时需要为其设置为 null(了解) -->
27         <property name="dataSource"><null/></property>
28     </bean>
29     
30     <!-- 装配集合属性 -->
31     <bean id="user" class="com.atguigu.spring.helloworld.User">
32         <property name="userName" value="Jack"></property>
33         <property name="cars">
34             <!-- 使用 list 元素来装配集合属性 -->
35             <list>
36                 <ref bean="car"/>
37                 <ref bean="car2"/>
38             </list> 
39         </property>
40     </bean>
41     
42     <!-- 声明集合类型的 bean -->
43     <util:list id="cars">
44         <ref bean="car"/>
45         <ref bean="car2"/>
46     </util:list>
47     
48     <bean id="user2" class="com.atguigu.spring.helloworld.User">
49         <property name="userName" value="Rose"></property>
50         <!-- 引用外部声明的 list -->
51         <property name="cars" ref="cars"></property>
52     </bean>

 

 

 1 <bean id="user3" class="com.atguigu.spring.helloworld.User"
 2         p:cars-ref="cars" p:userName="Titannic"></bean>
 3         
 4     <!-- bean 的配置能够继承吗 ? 使用 parent 来完成继承 -->    
 5     <bean id="user4" parent="user" p:userName="Bob"></bean>
 6     
 7     <bean id="user6" parent="user" p:userName="维多利亚"></bean>
 8     
 9     <!-- 测试 depents-on -->    
10     <bean id="user5" parent="user" p:userName="Backham" depends-on="user6"></bean>
11     
depents-on:bean之间的依赖关系

    <!-- 自动装配: 只声明 bean, 而把 bean 之间的关系交给 IOC 容器来完成 -->
    <!--  
        byType: 根据类型进行自动装配. 但要求 IOC 容器中只有一个类型对应的 bean, 若有多个则无法完成自动装配.
        byName: 若属性名和某一个 bean 的 id 名一致, 即可完成自动装配. 若没有 id 一致的, 则无法完成自动装配
    -->
    <!-- 在使用 XML 配置时, 自动转配用的不多. 但在基于 注解 的配置时, 自动装配使用的较多.  -->
    <bean id="dao" class="com.atguigu.spring.ref.Dao">
        <property name="dataSource" value="C3P0"></property>                
    </bean>
    
    <!-- 默认情况下 bean 是单例的! -->
    <!-- 但有的时候, bean 就不能使单例的. 例如: Struts2 的 Action 就不是单例的! 可以通过 scope 属性来指定 bean 的作用域 -->
    <!--  
        prototype: 原型的. 每次调用 getBean 方法都会返回一个新的 bean. 且在第一次调用 getBean 方法时才创建实例
        singleton: 单例的. 每次调用 getBean 方法都会返回同一个 bean. 且在 IOC 容器初始化时即创建 bean 的实例. 默认值 
    -->
    <bean id="dao2" class="com.atguigu.spring.ref.Dao" scope="prototype"></bean>
    
    <bean id="service" class="com.atguigu.spring.ref.Service" autowire="byName"></bean>
    
    <bean id="action" class="com.atguigu.spring.ref.Action" autowire="byType"></bean>
    
    <!-- 导入外部的资源文件 -->
    <context:property-placeholder location="classpath:db.properties"/>
    
    <!-- 配置数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
        
        <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
        <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
    </bean>
    
    <!-- 测试 SpEL: 可以为属性进行动态的赋值(了解) -->
    <bean id="girl" class="com.atguigu.spring.helloworld.User">
        <property name="userName" value="周迅"></property>
    </bean>
    
    <bean id="boy" class="com.atguigu.spring.helloworld.User" init-method="init" destroy-method="destroy">
        <property name="userName" value="高胜远"></property>
        <property name="wifeName" value="#{girl.userName}">
</property>
    </bean>

 



 
  
  


 1 public class MyBeanPostProcessor implements BeanPostProcessor {
 2 
 3     //该方法在 init 方法之后被调用
 4     @Override
 5     public Object postProcessAfterInitialization(Object arg0, String arg1)
 6             throws BeansException {
 7         if(arg1.equals("boy")){
 8             System.out.println("postProcessAfterInitialization..." + arg0 + "," + arg1);
 9             User user = (User) arg0;
10             user.setUserName("李大齐");
11         }
12         return arg0;
13     }
14 
15     //该方法在 init 方法之前被调用
16     //可以工作返回的对象来决定最终返回给 getBean 方法的对象是哪一个, 属性值是什么
17     /**
18      * @param arg0: 实际要返回的对象
19      * @param arg1: bean 的 id 值
20      */
21     @Override
22     public Object postProcessBeforeInitialization(Object arg0, String arg1)
23             throws BeansException {
24         if(arg1.equals("boy"))
25             System.out.println("postProcessBeforeInitialization..." + arg0 + "," + arg1);
26         return arg0;
27     }
28 
29 }



 1     <!-- 配置 bean 后置处理器: 不需要配置 id 属性, IOC 容器会识别到他是一个 bean 后置处理器, 并调用其方法 -->
 2     <bean class="com.atguigu.spring.ref.MyBeanPostProcessor"></bean>
 3     
 4     <!-- 通过工厂方法的方式来配置 bean -->
 5     <!-- 1. 通过静态工厂方法: 一个类中有一个静态方法, 可以返回一个类的实例(了解) -->
 6     <!-- 在 class 中指定静态工厂方法的全类名, 在 factory-method 中指定静态工厂方法的方法名 -->
 7     <bean id="dateFormat" class="java.text.DateFormat" factory-method="getDateInstance">
 8         <!-- 可以通过 constructor-arg 子节点为静态工厂方法指定参数 -->
 9         <constructor-arg value="2"></constructor-arg>
10     </bean>
11     
12     <!-- 2. 实例工厂方法: 先需要创建工厂对象, 再调用工厂的非静态方法返回实例(了解) -->
13     <!-- ①. 创建工厂对应的 bean -->
14     <bean id="simpleDateFormat" class="java.text.SimpleDateFormat">
15         <constructor-arg value="yyyy-MM-dd hh:mm:ss"></constructor-arg>
16     </bean>
17     
18     <!-- ②. 有实例工厂方法来创建 bean 实例 -->
19     <!-- factory-bean 指向工厂 bean, factory-method 指定工厂方法(了解) -->
20     <bean id="datetime" factory-bean="simpleDateFormat" factory-method="parse">
21         <!-- 通过 constructor-arg 执行调用工厂方法需要传入的参数 -->
22         <constructor-arg value="1990-12-12 12:12:12"></constructor-arg>
23     </bean>
24     
25     <!-- 配置通过 FactroyBean 的方式来创建 bean 的实例(了解) -->
26     <bean id="user" class="com.atguigu.spring.ref.UserBean"></bean>
27     

 

 

 1 <!--  
 2         1. 默认情况下, IOC 容器中的 bean 是单例的! 若对象是单例的, 则在创建 IOC 容器时即创建 bean 的实例, 并对 bean 的属性进行初始化. 
 3         2. 可以通过 bean 的 scope 属性来修改 bean 的作用域. 若取值为 prototype, 则 bean 为原型的: 每次向容器获取实例, 得到的都是一个新的对象.
 4         而且, 不在创建 IOC 容器时创建 bean 的实例了. 
 5         3. IOC 容器中 bean 的生命周期: 
 6         3.1 一般地, 讨论 bean 的生命周期, 是建立在 bean 是单例的基础上的. 
 7         3.2 可以为 bean 指定 init 和 destroy 方法
 8         3.3 还可以通过 bean 的后置处理器来更加丰富 bean 的生命周期方法(面试时.).
 9     -->
10     <bean id="helloWorld" 
11         class="com.atguigu.spring.helloworld.HelloWorld" 
12         scope="singleton"
13         init-method="init"
14         destroy-method="destroy">
15         <property name="userName" value="atguigu"></property>
16     </bean>
17     
18     <!--  
19         1. 在 IOC 容器中配置 bean 之间的关联关系
20     -->
21     <bean id="userDao"
22         class="com.atguigu.spring.ref.UserDao"></bean>
23 
24     <bean id="userService"
25         class="com.atguigu.spring.ref.UserService">
26         <property name="userDao" ref="userDao"></property>    
27     </bean>
28     
29     <bean id="userAction" 
30         class="com.atguigu.spring.ref.UserAction">
31         <property name="userService" ref="userService"></property>
32     </bean>

 

 

转载于:https://www.cnblogs.com/liuqing-bk/p/4821487.html

相关文章:

  • 网站通常使用一些javascript包裹 简化电话
  • 我的开始--大道至简的第一章
  • 学习一样新东西行而有效的方法 学习捷径 一项由10个步骤组成的学习方法
  • VS2010中汉字拷贝到Word出现乱码问题解决
  • hdu 5119 Happy Matt Friends (dp)
  • Json.Net系列教程 1.Json.Net介绍及实例
  • PHP 数据结构
  • JavaScript 三种创建对象的方法
  • Java虚拟机(JVM)中的内存设置详解
  • Remove Linked List Elements
  • typeof、offsetof、container_of的解释
  • 转:有关retina和HiDPI那点事
  • C#笔记誊录二
  • Enum:Backward Digit Sums(POJ 3187)
  • 【SSH三框架】Hibernate基金会七:许多附属业务
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • PHP 7 修改了什么呢 -- 2
  • vue学习系列(二)vue-cli
  • 初识 webpack
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 猴子数据域名防封接口降低小说被封的风险
  • 回顾2016
  • 机器学习中为什么要做归一化normalization
  • 简单实现一个textarea自适应高度
  • 聊聊flink的TableFactory
  • 区块链将重新定义世界
  • 如何解决微信端直接跳WAP端
  • 为什么要用IPython/Jupyter?
  • 正则表达式
  • 数据库巡检项
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • # include “ “ 和 # include < >两者的区别
  • # Maven错误Error executing Maven
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #单片机(TB6600驱动42步进电机)
  • #前后端分离# 头条发布系统
  • (C#)一个最简单的链表类
  • (windows2012共享文件夹和防火墙设置
  • (第一天)包装对象、作用域、创建对象
  • (多级缓存)多级缓存
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (轉)JSON.stringify 语法实例讲解
  • .axf 转化 .bin文件 的方法
  • .NET 材料检测系统崩溃分析
  • .net 流——流的类型体系简单介绍
  • .NET6 命令行启动及发布单个Exe文件
  • .NET序列化 serializable,反序列化
  • /etc/fstab 只读无法修改的解决办法
  • /run/containerd/containerd.sock connect: connection refused
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘