SpringIOC/DI
spring笔记
高内聚低耦合:
工厂模式:通过第三方的类产生我们需要的产品(对象),用来解耦合
简单工厂:
- 提供产品接口,之后让所有产品实现该接口
- 提供工厂的接口,其中提供一个方法,该方法接受一个String参数,返回产品的接 口类型
- 工厂的实现类中,根据参数的不同返回不同的产品
简单工程+反射:基本步骤和简单工厂一直,只不过在工厂的实现类中通过反射的方式动 态创建产品的实例返回
我们知道java世界是运行在JVM之上的,我们编写的类代码,在经过编译器编译之后,会为每个类生成对应的.class文件,这个就是JVM可以加载执行的字节码。运行时期间,当我们需要实例化任何一个类时,JVM会首先尝试看看在内存中是否有这个类,如果有,那么会直接创建类实例;如果没有,那么就会根据类名去加载这个类,当加载一个类,或者当加载器(class loader)的defineClass()被JVM调用,便会为这个类产生一个Class对象(一个Class类的实例),用来表达这个类,该类的所有实例都共同拥有着这个Class对象,而且是唯一的.
springIOC
springIOC:就是一个对象工厂,用来产生各种我们需要的对象
IOC(控制反转):反转资源获取的方向,以前使我们自己new对象,现在springIOC帮我们创建对象,我们从IOC容器中那我们想要的对象即可
DI(依赖注入):
springIOC开发步骤:
- 导入spring核心包
- 在src下面创建springIOC.xml配置文件
- 现创建IOC容器,然后从IOC容器中获取对象
IOC需要注意的问题: - 放在IOC容器里面的bean不管程序中有没有用到在启动IOC容器的时候回帮我们全 部实例化,其中原型状态的bean在使用的时候创建
- IOC容器默认实例化的对象为单例状态
springDI(依赖注入)
依赖注入:在配置bean通过配置文件给对象的属性注入值
- 给普通属性注入值
- 给对象类型的属性注入值
给list集合注入值
或者…增加nameSpace:util<!-- 相当于list中的一个元素 -->
<ref bean="s1"/>
<ref bean="s2"/>
<bean class="com.zl.pojo.Student">
<property name="name" value="内部bean"></property>
</bean>
</util:list>
给map属性注入值
调用指定的有参数构造方法
- 给date类型的属性注入值
依赖注入需要注意的问题:
- 注入的时候回调用属性的set方法
- 在实例化对象的时候默认调用起无参数构造方法
- 可以使用util命名空间把list集合配置成类似于bean的形式(可以被ref引用)
- 使用p命名空间简化bean的配置
自动扫描以及自动注入
自动扫描:
可以混用但是既然分了我们就按照人家的约定每个层用不同的注解,常用注解如下:
@Component: 基本注解, 标识了一个受 Spring 管理的组件
@Respository: 标识持久层组件
@Service: 标识服务层(业务层)组件
@Controller: 标识表现层组件
注意:
- 需要导入aop相关的jar包
开启自动注入2.开启自动注入
默认放到IOC容器里面的beanid为类名首字母小写
- 可以通过在注解后面添加参数自定义bean的id
- 可以通过注解设置bean为原型状态
自动注入(@Autowired):
1.当属性上面写该注解,spring扫描到该注解会去IOC容器中找一个该属性类型的bean,找到以后把该bean注入给该属性,如果根据类型无法进行注入的时候,那么会把属性名字和beanid一样的bean注入给该属性
2.用该注解默认要保证IOC容器里面必须有一个该属性类型的bean
还没有评论,来说两句吧...