Spring(一)

Spring(一)


Spring框架部署

Spring 基础模块说明

Spring模块说明
核心容器模块(IOC容器):Core Container。
包含Beans,core,context,expression 这四个Jar包。

手动导包:

spring-beans-4.0.0.M2.jar
spring-context-4.0.0.M2.jar
spring-core-4.0.0.M2.jar
spring-expression-4.0.0.M2.jar

·导包具体过程请百度·

Maven导包:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.18.RELEASE</version>
</dependency>

dependency包含的Jar
maven具体使用方法请百度

创建Spring配置文件

XML文件类型的Spring配置文件
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

其实也就是一个XML文件,<beans>里的是相关命名空间

命名空间相关知识可以看这篇文章
我来说说XML文件中的xmlns、xmlns:xsi和xsi:schemaLocation、dtd文件的具体含义

Spring配置类Spring4.0以后支持并推荐使用的Spring配置文件方式)
/**
 * @Configuration 标明此类为 spring配置类
 */
@Configuration
public class SpringConfig {
}

Spring框架部署到这里就算完成了,归纳起来就两步:1.导包 2.创建配置文件。导包方式分两种,手动导入和使用maven(一般项目中都会使用maven,手动好麻烦)。配置文件在4.0之后支持了配置类的形式进行创建具体用法之后会有讲

Spring配置文件分析

创建Bean

核心容器(Spring core)提供Spring框架的基本功能。Spring以bean的方式组织和管理Java应用中的各个组件及其关系。Spring使用BeanFactory来产生和管理Bean,它是工厂模式的实现。BeanFactory(Bean工厂)使用控制反转(IoC)模式将应用的配置和依赖性规范与实际的应用程序代码分开。BeanFactory使用依赖注入的方式提供给组件依赖。——引自Spring 7大功能模块的作用[转]

为了体现Spring的IOC,我们首先需要创建一些让Spring进行管理的Bean

public class User {
    int id;
    String username;
    String password;
    int age;
    /**
        无参构造方法,spring默认使用无参构造方法进行对象创建。
        JAVA基础:类创建了有参构造方法后默认的无参构造方法将不会创建
        所以当我们创建了有参构造方法后还需要创建一个无参构造方法
    */
    public User() {
    }

    public User(int id, String username, String password, int age) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
    }
    /**
        属性的get/set方法,Spring默认使用属性对应的get/set方法进行赋值取值
    */


    /**
    重写 toSting 方法单纯只是方便我们进行测试,实际使用中并不需要
    */
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                '}';
    }
}

这样一个Bean文件就创建好了,结构:1.Bean的类名 2.属性 3.无参构造方法 4.属性的get/set方法

使用Spring配置文件对Bean进行管理

Spring配置类方式
/**
 * @Configuration 标明此类为 spring配置类
 */
@Configuration
public class SpringConfig {

    /**
     * @Value 获取资源文件中数据并将其赋值给变量
     */
    @Value("${user}")
    public String name;

    /**
     * @Bean 表名此方法为 Bean。
     * name 为 value 的别名,两个属性都用于标明 bean 的唯一标识符,默认值为方法名
     * 
     */
    @Bean(name = "uss")
    public User getUser(){
        return new User(0,"张三","zhangsan",10);
    }
    @Bean
    public User user(){
        return new User(0,"李四","zhangsan",10);
    }
}
XML配置文件方式
    <!-- 配置一个 bean -->
    <!--
      通过框架创建对象
      id  :  Bean唯一标识符
      class  :  对象所属类的路径
    -->
    <bean id="user" class="com.toyBrickBoy.object.beans.User">
        <!--
        为属性赋值
        ![CDATA[]]  :  值存在违规字符时使用<![CDATA[value]]>的方式进行赋值
        property  :  为对象的属性赋值
          name  :  值对应对象的某个属性
          value  :  调用属性对应的set方法时传递的参数(基本数据类型+字符串)
          ref  :  调用属性对应的set方法传递的参数(对象)
        -->
        <property name="id" value="10"></property>
        <property name="username">
            <value>张三</value>
        </property>
     </bean>
     <!--
        constructor-arg  :  调用构造方法为属性赋值
          value  :  调用构造方法时传递的参数(基本数据类型+字符串)
          ref  :  调用构造方法时传递的参数(对象)
          type  :  根据参数类型进行赋值 (多个相同类型时尽量避免使用)
          name  :  根据参数名进行赋值
          index  :  根据参数位置进行赋值(位置从0开始)
        -->
    <bean id="uu" class="com.toyBrickBoy.object.beans.User">
        <constructor-arg index="0" value="10"/>
        <constructor-arg name="username" value="王五"/>
        <constructor-arg name="password" value="wangwu"/>
        <constructor-arg type="int" value="102"/>
    </bean>

创建main方法进行验证

public static void main(String[] args) {
  /**
   * ApplicationContext 接口
   *  ApplicationContext的中文意思是“应用前后关系”,它继承自BeanFactory接口,除了包含BeanFactory的所有功能之外,
   *  在国际化支持、资源访问(如URL和文件)、事件传播等方面进行了良好的支持,
   *  被推荐为Java EE应用之首选,可应用在Java APP与Java Web中。
   * ConfigurableApplicationContext 接口继承 ApplicationContext 定义了 close 方法
   *
   */

  /**
   * 读取XML配置文件信息并创建对象
   * ClassPathXmlApplicationContext  :  从类路径读取配置文件
   * FileSystemXmlApplicationContext  :  从文件路径读取配置文件
   */
  ApplicationContext cpac = new ClassPathXmlApplicationContext("SpringConfig.xml");

  /**
   * 读取配置类信息并创建对象
   * AnnotationConfigApplicationContext  :  加载配置类信息,可同时加载多个类
   */
  ConfigurableApplicationContext acac = new AnnotationConfigApplicationContext(SpringConfig.class);

  /**
   * getBean  :  获取IOC容器中的对象bean,参数为Bean的唯一标识符
   */
  User user = (User)acac.getBean("uss");
  User uu = (User)cpac.getBean("uu");
  System.out.println(user);

  acac.close();
}

总结

这样一个简单的Spring就搞定了,当然实际使用中不会这么简陋

基本步骤:

  1. 导包
    1. 手动导包
    2. maven导包
  2. 创建Spring配置文件
    1. 配置类方式的配置文件
    2. XML文件方式的配置文件
  3. 创建Bean类
  4. 使用配置文件创建Bean对象
  5. main方法加载配置文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值