Spring基础学习(一)

Spring基础学习(一)

一 、spring核心功能

  • IoC/DI 控制反转/依赖注入
  • AOP 面向切面编程
  • 声明式事物

二 、spring框架的runtime

在这里插入图片描述

  • test spring 提供测试功能

  • Core Container 核心容器 spring启动最基本的条件

    Beans:spring负责创建类对象并管理对象
    Core:核心类
    Context :上下文参数,获取外部资源或管理注解等
    SpEI:expression.jar
  • AOP:实现AOP 功能功能需要的依赖

  • Aspects:切面AOP依赖的包

  • Data Access/Integration:spring封装数据访问层相关内容

    JDBC:spring对JDBC封装后的代码
    ORM:封装了持久层框架的代码,例如:Hibernate
    transactions:对应spring-tx.jar声明事务使用
  • WEB:需要spring完成web相关功能时需要

    由Tomcat加载spring配置文件时需要有spring-web包

三、IoC是什么?

  • IoC完成的事情由原先程序员主动通过new实例化对象的事情,交给spring负责
  • 控制反转中控制指的是:控制类的对象
  • 控制反转中反转指的是转交给spring负责
  • IoC最大的作用:解耦 程序员不需要管理对象,解除了对象管理和程序员之间的耦合

四、spring环境搭建

  1. 导入jar(四个核心包+一个日志包)
    在这里插入图片描述

  2. 在src 目录下新建applicationContext.xml(applicationContext.xml配置的信息最终存储到ApplicationContext容器中)
    在这里插入图片描述

  3. 配置文件中只需要引入基本的schema

    • 通过 bean 创建对象

    • 默认配置文件被加载时创建对象

        <?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">
      
      <!-- id表示获取到对象标  class创建哪个类的对象 -->
      <!--设置无参的构造方法-->
      <bean id="people" class="com.bjsxt.pojo.People"/>
      

4.编写测试类方法

public class Test {
	public static void main(String[] args) {
			ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
			People people = ac.getBean("peo1",People.class);
			System.out.println(people);

			String[] names = ac.getBeanDefinitionNames();
			}
		}

注:

  • getBean(“标签id”,返回值类型);如果没有第二个参数,默认为Object
  • getBeanDefinitionNames(),spring容器中目前所有管理的所有对象

五、spring创建对象的三种方法

1 通过构造方法创建

  • 无参构造创建:默认情况

  • 有参构造创建:需要明确的配置(在applicationContext.xml中设置调用哪个构造方法创建对象,如果设定的条件匹配多个构造方法,则执行最后的构造方法

    1 index :参数的索引,从0开始
    2 name:参数名
    3 type:类型(区分开关键字和封装类 int和Integer)

      	<!--设置无参的构造方法-->
       	<bean id="people" class="com.bjsxt.pojo.People"/>
          <!--设置有参的构造方法 -->
          <bean id="peo" class="com.bjsxt.pojo.People">
             <constructor-arg index="0" name="id" value="123"></constructor-arg>
      	   <constructor-arg index="1" name="name" value="张丹"></constructor-arg>
          </bean>
    

2 通过实例工厂创建

  • 帮助创建类对象,一个工厂可以产生多个对象
  • 需要先创建工厂,才可以产生对象
  • 实现

(1)创建实例工厂

	public class PeopleFactory {
 		public People newInstance(){
       		return new People(1,"测试");
   		}
	}

(2)在applicationContext.xml中配置工厂对象和需要创建的对象

	<bean id="factory" class="com.bjsxt.factory.PeopleFactory "></bean>
    <bean id="p" factory-bean="factory" factory-method="newInstance"></bean>

3 通过静态工厂创建

  • 不需要创建工厂,快速创建对象

  • 实现

    (1)编写一个静态工厂(在方法中添加static)

    	 public class PeopleStaticFactory {
      		public static People newInstance(){
     			 return new People(2,"测试");
      		}
      	}
    

    (2)在applicationContext.xml中配置

       <!--静态工厂 -->
        <bean id="peo2" class="com.bjsxt.factory.PeopleStaticFactory" factory-method="newInstance"></bean>
    

六、如何给Bean的属性赋值(注入)

  • pojo类

      public class People {
      private int id;
      private String name;
      private Set<String> sets;
      private List<String> list;
      private String [] strs;
      private Map<String,String> map;
    
      @Override
      public String toString() {
          return "People{" +
                  "id=" + id +
                  ", name='" + name + '\'' +
                  ", sets=" + sets +
                  ", list=" + list +
                  ", strs=" + Arrays.toString(strs) +
                  ", map=" + map +
                  '}';
      }
      public People() {
          System.out.println("执行无参构造方法");
      }
      public People(int id) {
          this.id = id;
          System.out.println("执行有一个参数的构造方法");
      }
      public People(String name,int id) {
          this.id = id;
          this.name = name;
          System.out.println("执行有两个参数的顺序不同构造方法");
      }
      public People(int id, String name) {
          this.id = id;
          this.name = name;
          System.out.println("执行有两个参数的构造方法");
         }
      }
    
  • 在applicationContext.xml中配置

       <bean id="ppp" class="com.bjsxt.pojo.People">
          <property name="id" value="222"></property>
          <property name="name" value="张三"></property>
          <property name="map">
              <map>
                  <entry key=" a" value="aa"></entry>
                  <entry key=" b" value="bb"></entry>
                  <entry key=" c" value="cc"></entry>
                  <entry key=" d" value="dd"></entry>
              </map>
          </property>
          <property name="list">
              <list>
                  <value>1</value>
                  <value>2</value>
              </list>
          </property>
          <property name="sets">
              <set>
                  <value>1</value>
                  <value>2</value>
                  <value>3</value>
                  <value>4</value>
              </set>
          </property>
          <property name="strs" >
              <array>
                  <value>1</value>
                  <value>2</value>
                  <value>3</value>
              </array>
          </property>
      </bean>
    
    如果list只有一个值
      <property name="list" value="1"></property>
    

七、 如何给Bean的属性赋值(注入)

  • DI:当一个类(A)需要依赖另一个类(B)的对象时,把B赋值给A的过程就是依赖注入

  • 实现

      	 <bean id="peo3" class="com.bjsxt.pojo.People">
           	<property name="desk" ref="desk"></property>
       	</bean>
    
      	<bean id="desk" class="com.bjsxt.pojo.Desk ">
        	  <property name="id" value="1"></property>
       	  <property name="price" value="12"></property>
     		 </bean>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值