SpringIOC依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
</dependencies>
<!--方式1:无参构造方法创建对象-->
<bean id="p1" name="person1,person2" class="com.swjd.bean.Person" scope="singleton" lazy-init="true" init-method="init" destroy-method="destroy">
Spring第一章
- why?(spring的作用)
Spring可以解决业务逻辑层和其他各层的耦合问题,也是一个框架的粘合剂,它让面向接口编程思想贯穿了整个系统,特点:高内聚,低耦合,设计层框架!
主要学习spring的以下部分:
- IOC思想
- AOP编程
- 声明式事务的支持
- 框架无缝整合其他框架
- 常见模块?
20多个子模块,模块按组7大块,核心容器、数据访问/集成,Web,AOP(面向切面编程)、设备、消息和测试
- Spring环境搭建?
- IOC是什么?
控制反转,调用者的实例创建不再由调用者自己创建,而是由spring容器创建,这个过程把实例创建的控制权由应用代码转移到了外部容器,控制权发生了改变。
- DI是什么?
依赖注入,给对象赋属性值,一定要保留空的构造方法和get/set的方法!
- Bean标签里四个属性的作用:
- Name属性:给对象取名,名字可以同时取多个,但是不同的对象不能重复
- Scope对象作用域属性:
- scope = "singleton" 默认值,Spring容器默认创建的对象是单例!
- scope="prototype" 创建的对象是多例(每次使用对象的时候额外创建一个新的
- scope="session" 表示在一次会话范围内,Spring容器中的对象保持一个,公用同一个!
- scope="request" 表示在一次请求范围内,Spring容器中的对象保持一个,公用同一个
注意:后两个只能用在web项目里
- 对象懒创建(只有在scope = "singleton"才会生效)
lazy-init表示对象的加载时机(true:懒加载(使用对象的时候才创建);false(spring框架一启动就加载))
- 对象创建完成后调用的方法,和对象销毁后调用的方法
init-method="对象创建完成后调用的方法"
destroy-method="对象销毁后调用的方法"
- spring创建对象的四种方式?
-
- 用无参构造方法创建
-
<!--方式1:无参构造方法创建对象-->
<bean id="p1" name="person1,person2" class="com.swjd.bean.Person" scope="singleton" lazy-init="true" init-method="init" destroy-method="destroy">
<property name="id" value="957"></property>
<property name="name" value="貂蝉"></property>
<property name="sex" value="女"></property>
</bean>
-
-
- 用带参的构造方法创建对象
-
<!--方式2:用带参的构造方法创建对象-->
<bean id="p3" class="com.swjd.bean.Person">
<constructor-arg index="0" type="int" value="9528"></constructor-arg>
<constructor-arg index="1" type="java.lang.String" value="德玛西亚"></constructor-arg>
<constructor-arg index="2" type="java.lang.String" value="男"></constructor-arg>
</bean>
-
-
- 用静态工厂创建对象
-
<!--方式3:用静态工厂创建对象-->
<bean id="p4" class="com.swjd.beanfactory.PersonFactory" factory-method="createPerson"></bean>
-
-
- 用非静态工厂创建对象
-
<!--方式4:用非静态工厂创建对象-->
<bean id="noStaticfactory" class="com.swjd.beanfactory.NoStaticPersonFactory"></bean>
<bean id="p5" factory-bean="noStaticfactory" factory-method="createPerson"></bean>
- Spring依赖注入的4种方式?
- 调用set方法注入
<bean id="m1" class="com.swjd.bean.Man">
<!--第一种:依赖注入的方式:set注入-->
<property name="id" value="1"/>
<property name="name" value="刘德华"/>
<property name="age" value="48"/>
<!-- <property name="dog" ref="d1"/>-->
<property name="dog">
<ref bean="d1"/>
</property>
</bean>
- 调用带参的构造方法注入
<bean id="m2" class="com.swjd.bean.Man">
<!--第二种:依赖注入的方式:带参的构造方法-->
<constructor-arg index="0" type="int" value="2"/>
<constructor-arg index="1" type="java.lang.String" value="蔡徐坤"/>
<constructor-arg index="2" type="int" value="20"/>
<constructor-arg index="3" type="com.swjd.bean.Dog" ref="d1"/>
</bean>
- P命名空间注入(本质依旧是set注入,语法简洁一些)
<bean id="m3" class="com.swjd.bean.Man" p:id="3" p:name="八戒" p:age="108" p:dog-ref="d1"></bean>
- Spel表达式注入
<bean id="m4" class="com.swjd.bean.Man">
<property name="id" value="#{m1.id}"></property>
<property name="name" value="#{m2.name}"></property>
<property name="age" value="#{m3.age}"></property>
</bean>
---------------------------------基本类型-----------------------------------------------------
九、复杂类型的注入:
-
- 注入对象
- 注入数组
<property name="hobbies" >
<array>
<value>123</value>
<value>123</value>
</array>
</property>
-
- 注入集合
List:
<property name="subject">
<list>
<value>1234</value>
<value>1234</value>
</list>
</property>
Set:
<property name="boyFriends">
<set>
<value>12345</value>
<value>12345</value>
</set>
</property>
-
- 注入map
<property name="map">
<map>
<entry key="cn" value="中国"/>
<entry key="ru" value="俄罗斯"/>
</map>
</property>