zoukankan      html  css  js  c++  java
  • Spring学习之路1-初始Spring及IoC理念

    Spring 框架

    简介

    Spring框架是由于软件开发的复杂性而创建的

    • 目的:解决企业应用开发的复杂性

    • 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

    • 范围:任何Java应用

    优点:

    开源的免费的框架(容器)

    Spring是一个轻量级、非入侵式的框架

    控制反转(IOC)和面向切面(AOP)的容器框架

    支持事务的处理,对框架整合的支持

    官网:https://spring.io/

    GitHub:https://github.com/spring-projects/spring-framework


    Maven

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.4.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.2.4.RELEASE</version>
    </dependency>
    

    spring 七大模块

    IOC 理论

    IoC 全称为 Inversion of Control,即“控制反转”,Spring 的核心内容之一,是一种通过描述(xml 或 注解)并通过第三方获取特定对象的方式,Spring 中实现控制反转的是 IoC 容器,其实现方式是 DI(Dependency Injection),即依赖注入。

    1. 谁控制谁:在传统的开发模式下,我们都是采用直接 new 一个对象的方式来创建对象,也就是说你依赖的对象直接由你自己控制,但是有了 IOC 容器后,则直接由 IoC 容器来控制。所以“谁控制谁”,当然是 IoC 容器控制对象。
    2. 控制什么:控制对象。
    3. 为何是反转:没有 IoC 的时候我们都是在自己对象中主动去创建被依赖的对象,这是正转。但是有了 IoC 后,所依赖的对象直接由 IoC 容器创建后注入到被注入的对象中,依赖的对象由原来的主动获取变成被动接受,所以是反转。
    4. 哪些方面反转了:所依赖对象的获取被反转了。

    IoC创建对象

    通过xml创建对象

    <?xml version="1.0" encoding="UTF-8"?>
    <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
            https://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="he" class="com.youzi.pojo.Hello">
            <property name="Str" value="Hello Spring!"/>
        </bean>
    </beans>
    
    public class Hello {
        private String Str;
    
        public Hello(String str) {
            Str = str;
        }
    
        public Hello() {
        }
    
        public String getStr() {
            return Str;
        }
    
        public void setStr(String str) {
            Str = str;
        }
    }
    
    ...
    @Test
    public void test() {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        Object he = context.getBean("he");
        System.out.println(he);   
    }
    

    引用了其他对象的赋值方式:

    <bean id="userservice" class="com.youzi.service.UserServiceImpl">
        <property name="user" ref="user"/>
    </bean>
    

    没有参数直接初始化

    <bean id="user" class="com.youzi.dao.UserImpl"/>
    

    以上方式调用了对应类中的无参构造和 setter,即需要初始化的参数或者对象必须有对应的 setter,如果要调用有参构造可以使用 <constructor-arg> 通过类型、下标、参数名字、引用这几种方式传参

    使用构造器

    public Users(Hello hello, String num) {
        this.hello = hello;
        this.num = num;
    }
    
    <bean id="users" class="com.youzi.pojo.Users">
        <!--<constructor-arg type="java.lang.String" value="1"/>-->
        <!--<constructor-arg index="1" value="2"/>-->
        <constructor-arg name="num" value="3"/>
        <constructor-arg ref="he"/>
    </bean>
    

    spring基本配置

    别名,给对象创建另一个名字,可创建多个(别名也可以通过 bean 中的 name 创建)

    <bean id="he" class="com.youzi.pojo.Hello" name="hello3,hello4">
        <property name="Str" value="Hello Spring!"/>
    </bean>
    
    <alias name="he" alias="hello1"/>
    <alias name="he" alias="hello2"/>
    

    bean 对象默认创建的为单例模式,可以通过 scope="prototype" 修改,这样 hello3,hello4 就是两个不同的对象了

    导入其他的xml

    上面只是基本的配置,每个配置里面还有很多的细节配置待以后再进一步的学习


  • 相关阅读:
    springmvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?
    数据库中的锁机制
    在inux中安装redis的时候,会出现下面的这个异常
    使用SecureCRT操作linux系统时候的简单设置
    装饰者设计模式
    java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.
    事务
    2.6.1 测试架构师
    测试专家讲述通往测试架构师之路
    什么是软件测试架构师
  • 原文地址:https://www.cnblogs.com/wangjr1994/p/12514704.html
Copyright © 2011-2022 走看看