一、概述

  Spring是一个开源框架,它的核心是控制反转(IOC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。

  EE 开发分成三层结构:

    * WEB 层:Spring MVC.

    * 业务层:Bean 管理:(IOC)

* 持久层:Spring 的 JDBC 模板.ORM 模板用于整合其他的持久层框 架

注:Spring框架既可以单独使用 ,也可以结合其他优秀框架一起使用。

二、环境搭建

    开发包:

    下载地址:http://repo.springsource.org/libs-release-local/org/springframework/spring  解压(Spring目录结构:docs api和开发规范)

    导入jar包后在src下创建核心配置文件 applicationContext.xml该文件名称和位置不固定

二、IOC

   IOC:Inversion of Control 控制反转,意味着将设计好的类交给系统去控制,而不是在自己的内部控制,这这里指的是对象的创建反转给Spring。其作用是实现了程序的解耦合

  IOC图解:

案例:以User类为例

1创建类

public class User{

  private String username;
  private User user ;

  public void User(){};

  
  public void User(User user){
    this.user = user;
  }
  public void User(String username){
    this.username = username;
  }
public void show(){ System.out.println("Hello IOC!"); }

2创建名为applicationContext.xml配置文件并引入scheme约束

3配置参数

在applicationContext.xml配置文件中配置一下内容

<bean id = "user" class = "cn.User"></bean>

4.测试

public static void main(String [] args){
   //加载Spring配置文件,创建对象
  ApplicationContext context = new          ClassPathXmlApplicationContext("applicationContext.xml");
  //得到配置创建的对象
    User user = (User) context.getBean("user");
    user.show();
}    

四、Spring的bean管理(xml方式)

  bean实例化的三种方式:

    1.使用类的无参构造

<bean id = "user" class = "cn.User"></bean>

    2.使用静态工厂创建

       》创建静态方法返回类对象

public class BeanFactory{
   public static User getBean(){
        return new User();
    } 
}

      》配置文件

    3.使用实例工厂创建

      》创建工厂类

public class BeanFactory{
   public  User getBean(){
        return new User();
    }
}

      》配置文件

bean标签常用属性:

        id:给bean命名,id属性值任意(不能含特殊符号),根据id得到配置对象。

        class:创建对象类所在的全路径

        name:功能和id一样,但是在name属性中可以包括特殊符号

        Scope:默认值为singleton(单例),prototype(多例),request(把创建的对象保存到request域中),session(把创建的对象保存到session域中),globalSession(把创建的对象保存到globalSession中);

五、属性注入

  1.使用有参构造注入属性

  

<bean id = "user2" class = "cn.User" >
    <constructor-arg name = "username" value = "ZhangSan"></constructor-org>
</bean>

  2.使用set方法注入属性(重点)

<bean id = "user3" class = "cn.User">
    <!--name为属性名称 value为设置的具体值-->
    <property name = "username" value = "LiSi"></property>
</bean>

  3.P名称空间注入

  首先引入约束   

  配置文件

<bean id = "user" class = "cn.User" p:name = "LiHong"></bean>

注入对象类型的属性

<bean id = "user3" class = "cn.User" ></bean>
<bean id = "user4" class = "cn.User" >
     <property name = "user3" ref = "user"></property>
</bean>

注入复杂属性

<bean id="person" class="cn.User">
            <!-- 数组 -->
        <property name="arrs">
        <list>
            <value>小王</value>
            <value>小马</value>
            <value>小宋</value>
        </list>
    </property>

          <!-- list -->
    <property name="list">
            <list>
                <value>小奥</value>
                <value>小金</value>
                <value>小普</value>
            </list>
        </property>

        <!-- map -->
        <property name="map">
            <map>
                <entry key="aa" value="lucy"></entry>
                <entry key="bb" value="mary"></entry>
                <entry key="cc" value="tom"></entry>
            </map>
        </property>

        <!-- properties -->
        <property name="properties">
            <props>
                <prop key="driverclass">com.mysql.jdbc.Driver</prop>
                <prop key="username">root</prop>
            </props>
        </property>
    </bean>
                    

六、注解开发

  注解创建对象

    》1.首先应导入aop的jar包。在配置文件中引入约束

    》2.配置文件:

    

<!--开启注解扫描 即扫描指定包下类、方法、属性上面是否有注解-->
<context:component-scan base-package = "cn"></context:component>
<!--只扫描属性上的注解

   <context:annotation-config></context:annotation-config>
-->

    》3.注解创建对象

    》4.测试

注:

@Scope是配置对象是单例还是实例用的。

  注解注入属性

      1.自动注入@Autowired

     

      2.@Resource注入

   注解和配置文件混合使用注入属性:

       1.创建对象是使用配置文件实现的

<bean id = "userDao" class = "cn.UserDao"></bean>
<bean id = 'userService" class = "cn.UserServiece"></bean>

      2.注入属性的操作通过注解方式实现

@Resource(name = "userDao")
private UserDao userDao;

框架学习之Spring(一IOC)----HelloWrod的更多相关文章

  1. Spring框架学习(2)IOC学习

    内容源自:IOC理解   spring ioc注入的三种方式  ioc工厂bean深入理解 耦合性,在java中表现为类之间的关系,耦合性强说明类之间的依赖关系强: 侵入性:框架对代码的侵入: 在传统 ...

  2. Spring 框架学习(1)--Spring、Spring MVC扫盲

    纸上得来终觉浅,绝知此事要躬行 文章大纲 什么是spring 传统Java web应用架构 更强的Java Web应用架构--MVC框架 Spring--粘合式框架 spring的内涵 spring核 ...

  3. Spring框架学习03——Spring Bean 的详解

    1.Bean 的配置 Spring可以看做一个大型工厂,用于生产和管理Spring容器中的Bean,Spring框架支持XML和Properties两种格式的配置文件,在实际开发中常用XML格式的配置 ...

  4. Spring框架学习02——Spring IOC 详解

    1.Spring IOC的基本概念 IOC(Inverse of Control)反转控制的概念,就是将原本在程序中手动创建对象的控制权,交由Spring框架管理.当某个Java对象(调用者)需要调用 ...

  5. Spring 框架学习—控制反转(IOC)

        Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建. 简单来说,Spring是一个分层的JavaSE/EEfull-st ...

  6. spring框架学习(二)——注解方式IOC/DI

    什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分 ...

  7. [spring入门学习笔记][spring的IoC原理]

    什么叫IoC 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Dependency ...

  8. 【spring源码学习】spring的IOC容器之自定义xml配置标签扩展namspaceHandler向IOC容器中注册bean

    [spring以及第三方jar的案例]在spring中的aop相关配置的标签,线程池相关配置的标签,都是基于该种方式实现的.包括dubbo的配置标签都是基于该方式实现的.[一]原理 ===>sp ...

  9. 【spring源码学习】spring的IOC容器在初始化bean过程

    [一]初始化IOC的bean的时候Spring会执行的一些回调方法 (1)spring bean创建的前置处理 =>ApplicationContextAwareProcessor 在创建bea ...

随机推荐

  1. 读取pdf内容分页和全部

    //读取pdf 全部内容public static String topdffile(String pdffile){ StringBuffer result = new StringBuffer() ...

  2. console.log(0.2+0.4===0.6)// true or false??

    在正常的数学逻辑思维中,0.2+0.4===0.6这个逻辑是正确的,但是在JavaScript中0.2+0.4!==0.6这是为什么呢?这个问题也会偶尔被用来当做面试题来考查面试者对 JavaScri ...

  3. linux截取字符串之sort、uniq、cut用法

    sort命令是帮我们依据不同的数据类型进行排序 参 数:  -b   忽略每行前面开始出的空格字符.  -c   检查文件是否已经按照顺序排序.  -f   排序时,忽略大小写字母.  -M   将前 ...

  4. 数据管理 - 每天5分钟玩转 Docker 容器技术(147)

    本章将讨论 Kubernetes 如何管理存储资源. 首先我们会学习 Volume,以及 Kubernetes 如何通过 Volume 为集群中的容器提供存储:然后我们会实践几种常用的 Volume ...

  5. mode

    mode (jdoj-2905) 题目大意:给你一个n个数的数列,其中某个数出现了超过$\lfloor\frac{n}{2}\rfloor$即众数,请你找出那个数. 注释:n<=$5\cdot ...

  6. 随记PC-win7 64位系统网络连接状态一直转圈、等待状态的异常解决方案

    各位看官好~ 最近电脑也做了下升级,入手个士必得360G的SSD来玩玩,顺便也下个新系统,看看有什么区别,想想顺便升级下系统也是好的,就开始了装机,装系统的路程~~~~~~ 好了不说废话,直接进入主题 ...

  7. python(练习实例)

    Python 练习实例1 题目:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 我的代码:python 3+ #2017-7-20 list_h = [1,2,3,4 ...

  8. "机器人防火墙":人机识别在应用安全及风控领域的一点实践

    美剧 WestWorld 第二集里有个场景十分有意思:游客来到西部世界公园,遇到了一个漂亮的女接待员,但无法区分对方是否是人类,于是产生了如下对话: Guest: "Are you real ...

  9. Alpha冲刺第一天

    Alpha冲刺第一天 站立式会议 项目进展 项目的第一天,主要工作是对项目的开发进行规划,以及将规划的成果转化为燃尽图与博客文章.依据项目需求分析报告与开题报告中已经完成的设计任务和项目规划,我们将系 ...

  10. 201621123068 Week02-Java基本语法与类库

    1. 本周学习总结 1.1 当浮点数和整数放到一起运算时,java一般会将整数转化为浮点数然后进行浮点数计算,但是这样得出的结果通常与数学运算有一定误差,浮点数精确计算需要使用BigDecimal类 ...