SpringIOC/DI

spring笔记
高内聚低耦合:

工厂模式:通过第三方的类产生我们需要的产品(对象),用来解耦合
简单工厂:

  1. 提供产品接口,之后让所有产品实现该接口
  2. 提供工厂的接口,其中提供一个方法,该方法接受一个String参数,返回产品的接 口类型
  3. 工厂的实现类中,根据参数的不同返回不同的产品
    简单工程+反射:基本步骤和简单工厂一直,只不过在工厂的实现类中通过反射的方式动 态创建产品的实例返回

我们知道java世界是运行在JVM之上的,我们编写的类代码,在经过编译器编译之后,会为每个类生成对应的.class文件,这个就是JVM可以加载执行的字节码。运行时期间,当我们需要实例化任何一个类时,JVM会首先尝试看看在内存中是否有这个类,如果有,那么会直接创建类实例;如果没有,那么就会根据类名去加载这个类,当加载一个类,或者当加载器(class loader)的defineClass()被JVM调用,便会为这个类产生一个Class对象(一个Class类的实例),用来表达这个类,该类的所有实例都共同拥有着这个Class对象,而且是唯一的.
springIOC
springIOC:就是一个对象工厂,用来产生各种我们需要的对象
IOC(控制反转):反转资源获取的方向,以前使我们自己new对象,现在springIOC帮我们创建对象,我们从IOC容器中那我们想要的对象即可
DI(依赖注入):

springIOC开发步骤:

  1. 导入spring核心包
  2. 在src下面创建springIOC.xml配置文件
  3. 现创建IOC容器,然后从IOC容器中获取对象
    IOC需要注意的问题:
  4. 放在IOC容器里面的bean不管程序中有没有用到在启动IOC容器的时候回帮我们全 部实例化,其中原型状态的bean在使用的时候创建
  5. IOC容器默认实例化的对象为单例状态
    在这里插入图片描述

springDI(依赖注入)

依赖注入:在配置bean通过配置文件给对象的属性注入值

  1. 给普通属性注入值
    在这里插入图片描述
  2. 给对象类型的属性注入值
    在这里插入图片描述
    在这里插入图片描述
  3. 给list集合注入值
    在这里插入图片描述
    或者…增加nameSpace:util
<util:list id="stus">
		<!-- 相当于list中的一个元素 -->
		<ref bean="s1"/>
		<ref bean="s2"/>
		<bean class="com.zl.pojo.Student">
			<property name="name" value="内部bean"></property>
		</bean>
	</util:list>
  1. 给map属性注入值
    在这里插入图片描述
<property name="stuMap">
		<util:map>
			<entry key="201" value-ref="stu1"></entry>
		</util:map>
		</property>
  1. 调用指定的有参数构造方法
    在这里插入图片描述
  2. 给date类型的属性注入值
    在这里插入图片描述

依赖注入需要注意的问题:

  1. 注入的时候回调用属性的set方法
  2. 在实例化对象的时候默认调用起无参数构造方法
  3. 可以使用util命名空间把list集合配置成类似于bean的形式(可以被ref引用)
  4. 使用p命名空间简化bean的配置

自动扫描以及自动注入
自动扫描:
可以混用但是既然分了我们就按照人家的约定每个层用不同的注解,常用注解如下:
@Component: 基本注解, 标识了一个受 Spring 管理的组件
@Respository: 标识持久层组件
@Service: 标识服务层(业务层)组件
@Controller: 标识表现层组件

注意:

  1. 需要导入aop相关的jar包
  2. 开启自动注入2.开启自动注入
 <context:component-scan base-package="com.zl"></context:component-scan>
  1. 默认放到IOC容器里面的beanid为类名首字母小写
  2. 可以通过在注解后面添加参数自定义bean的id
  3. 可以通过注解设置bean为原型状态
    在这里插入图片描述
    自动注入(@Autowired):
    1.当属性上面写该注解,spring扫描到该注解会去IOC容器中找一个该属性类型的bean,找到以后把该bean注入给该属性,如果根据类型无法进行注入的时候,那么会把属性名字和beanid一样的bean注入给该属性
    在这里插入图片描述
    2.用该注解默认要保证IOC容器里面必须有一个该属性类型的bean
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44251024/article/details/85250908
DI