【Spring 框架(自学)】Day01--2022/3/20

Spring概述

  • Spring是一个轻量级的开源的Java EE框架
  • Spring可以解决企业应用发的复杂性
  • Spring有两个核心部分:IOC、Aop

IOC:控制反转,把对象的创建、赋值、管理工作交给代码之外的容器实现,

对象的创建由其它外部资源完成

Aoc:面向切面,不修改源代码的情况加进行功能的增强或添加

  • Spring的特点

1、方便解耦,简化开发

2、Aop编程支持

3、方便程序的测试

4、方便继承各种优秀的框架

5、方便进行事务操作

6、降低API开发


Spring的第一个核心:IOC

综上所述,IOC是控制反转,有两层意思:

控制:创建对象,对象的属性赋值,对象之间的关系管理

反转:把原来的开发人员的管理,创建对象的权限交给代码以外的容器负责,由容器代替开 发人员创建、管理并给对象赋值

正转:由开发人员去创建对象,并对其进行管理与赋值

//例如:
		public static void main(String[] args){
            OOP oop = new OOP();
        }

为什么使用IOC:其目的是减少对代码的改动,也能实现不同的功能,并实现解耦合


Java中创建对象的方式:

  • 构造方法,new OOP()
  • 反射
  • 序列化
  • 克隆
  • IOC:容器创建对象
  • 动态代理

其中,除IOC外,其它方法都需要手写创建对象的代码


IOC的体现:

之前学习servlet的过程中,Tomcat服务器会自动为你创建Servlet的对象,从而方便操作,而Tomcat也是作为一个容器,里面存放的有Servlet对象、Filter、Listener


IOC的技术实现

DI(Dependency Injection 依赖注入)是IOC的技术实现:只需要提供对象的名称即可,至于对象的创建、赋值、查找则都交给容器来完成,而Spring底层创建的对象,则对运用的是反射机制


第一个入门程序

1.创建一个实体类和实体类接口

//实体类接口

public interface UserMapper{
    void test();
}
//实体类

public class UserMapperImpl implements UserMapper{
    @Override
    public void test(){
        sout("用户测试方法")
    }
    
    public UserMapperImpl(){
        sout("执行无参构造方法")
    }
}

2.创建Spring配置文件(spring_config.xml)

<!--
	头文件
-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
    		
    
    
    <!--
		告诉spring并创建对象
			声明bean,创建一个对象
			id:自定义对象名称,也是其唯一值    spring通过id来找到对象
			class:类的全限定名称,不能是接口   因为spring是反射机制,必须使用类

		到了这一步,Spring就完成了以下操作:
			UserMapper userMapper = new UserMapperImpl();
	-->
    <bean id="userTest" class="路径.路径.类文件"></bean>
    
    	<!--
			Spring是如何将其保存的呢?
				Spring把创建好的对象存入map当中,并进行赋值操作
			如:map.put(id的值,对象)
			   map.put("userMapper",new UserMapperImpl());
		-->
    
</beans>

3.Junit测试

public class UserDaoTest(){
    
    //使用Spring创建对象
    @Test
  public void userTest(){
      //指定Spring配置文件的名称:读取配置文件
      String config = "spring_config.xml";
      //创建表示Spring容器的对象,ApplicationContext
      ApplicationContext applicationContext = new ClassPathXmlApplicationContext(config);
      /*
      	Application表示Spring的容器
      	ClassPathXmlApplicationContext则表示从类路径中加载配Spring的置文件
      */
      //从容器中获取某个对象,就要使用调用对象的方法:getBean("配置文件中id的值")
     	UserMapper userMapper = (UserMapper) applicationContext.getBean("userTest")
      //转换成所需要的类型然后使用
            
      //以上便完成了使用Spring的容器创建对象的操作,借下来直接调用即可
            userMapper.test();
    }
    
}

需要注意的是:当Spring创建好容器是,会默认创建配置中的所有对象

且对象创建时间为:从类路径中加载Spring的配置文件时

<!--头文件-->
<bean id="自定义名称" class="路径.路径.类文件"></bean>
<bean id="自定义名称1" class="路径.路径.类文件"></bean>
public class UserDaoTest(){
    
    @Test
    public void userTest(){
        String config = "spring_config";
        ApplicationContext applicationContext = ClassPathXmlApplicationContext(config);
        //以上为创建对象的时间
        
        //UserMapper userMapper = (UserMapper) applicationContext.getBean("配置文件中的id")
        //userMapper.test();
    }
}

获取Spring容器中Java的对象信息

public class UserDaoTest(){
    
    @Test
    public void springTest(){
       String config = "spring_config.xml";
       ApplicationContext applicationContext = new ClassPathXmlApplicationContext(config)
       //使用Spring提供的方法,获取容器中对象的数量
       int num = applicationContext.getBeanDefinitionCount();
       sout("容器中所含对象的数量为:"+num)   
      //获取容器对象中的名字
      String name[] = applicationContext.getBeanDefinitionNames();
      for (String s : name) {
          System.out.println(s);
        }
    }
}

Spring创建一个非自定义类的对象

<!--Spring中可以创建:自定义类的对象、非自定义类的对象-->

<!--头文件-->
<bean id="myDate" class="java.util.Date"></bean>
public class UserDaoTest(){
    
    @Test
    public void dateTest(){
       String config = "spring_config.xml";
       ApplicationContext applicationContext = new ClassPathXmlApplicationContext(config)
       Date date = (Date) applicationContext.getBean("myDate");
       //注意:此处并没有调用任何方法,所以默认调用的是无参构造 
       sout(date);
    }
}

综上所述:

当Spring创建好容器是,会默认创建配置中的所有对象,其创建对象时,默认调用的是无参构造


posted @   VVS,冷漠的心  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

囚鸟该如何超越今生?

点击右上角即可分享
微信分享提示