SpringIOC/DI 淡淡的烟草味﹌ 2022-04-02 06:48 317阅读 0赞 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容器默认实例化的对象为单例状态 ![在这里插入图片描述][20181225165812324.png] springDI(依赖注入) 依赖注入:在配置bean通过配置文件给对象的属性注入值 1. 给普通属性注入值 ![在这里插入图片描述][20181225165828632.png] 2. 给对象类型的属性注入值 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDI1MTAyNA_size_16_color_FFFFFF_t_70] ![在这里插入图片描述][20181225170043617.png] 3. 给list集合注入值 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDI1MTAyNA_size_16_color_FFFFFF_t_70 1] 或者…增加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属性注入值 ![在这里插入图片描述][20181225170142615.png] <property name="stuMap"> <util:map> <entry key="201" value-ref="stu1"></entry> </util:map> </property> 1. 调用指定的有参数构造方法 ![在这里插入图片描述][20181225170200236.png] 2. 给date类型的属性注入值 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDI1MTAyNA_size_16_color_FFFFFF_t_70 2] 依赖注入需要注意的问题: 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为原型状态 ![在这里插入图片描述][20181225170310461.png] 自动注入(@Autowired): 1.当属性上面写该注解,spring扫描到该注解会去IOC容器中找一个该属性类型的bean,找到以后把该bean注入给该属性,如果根据类型无法进行注入的时候,那么会把属性名字和beanid一样的bean注入给该属性 ![在这里插入图片描述][20181225170322773.png] 2.用该注解默认要保证IOC容器里面必须有一个该属性类型的bean ![在这里插入图片描述][20181225170408670.png] [20181225165812324.png]: /images/20220402/950a44f547a74c4ea4c20ec6cbaef1ba.png [20181225165828632.png]: /images/20220402/ab974c82d18c47ed91231b9e10082cbd.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDI1MTAyNA_size_16_color_FFFFFF_t_70]: /images/20220402/615b227d9c894c76816738fd1c521f3c.png [20181225170043617.png]: /images/20220402/a9df96f9b9e541d2bf75d73c5d349326.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDI1MTAyNA_size_16_color_FFFFFF_t_70 1]: /images/20220402/bc524c5bf6bd4a6e980eae1ac5c207f5.png [20181225170142615.png]: /images/20220402/056261708d13408cbd946f62173b56ab.png [20181225170200236.png]: /images/20220402/9a6b499d5925482b86e66f000f03103b.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDI1MTAyNA_size_16_color_FFFFFF_t_70 2]: /images/20220402/db43f0dc210f485499a0c5e227088005.png [20181225170310461.png]: /images/20220402/e9d38d2b89d34baa9d93200f24bfcf20.png [20181225170322773.png]: /images/20220402/b02622e9a227489b81f0313144105444.png [20181225170408670.png]: /images/20220402/1e49dc331f944784b35ff3af807f4d89.png
还没有评论,来说两句吧...