IOC:控制反转 也即(DI:依赖注入) 反转的是获取对象的方式,以前是自己new对象,而现在可以直接从IOC容器中拿(不过要先给IOC存放对象并赋值)【在IOC中定义bean的前提是,该bean的类必须提供了无参构造】
IOC容器使用bean创建对象,给对象的属性赋值:
<bean id="student" class="org.motinyu.entity.Student">
<property name="stuNo" value="2"></property>
<property name="stuName" value="ls"></property>
<property name="stuAge" value="22"></property>
</bean>
在测试类中获取IOC容器中的对象:
ApplicationContext conext= new ClassPathXmlApplicationContext("applicationContext.xml");
Student student = (Student) conext.getBean("student");
System.out.println(student);
依赖注入底层是通过反射实现的
1.set注入:通过实体类中对象的setXxx()方法赋值:【标签:property】
<bean id="student" class="org.motinyu.entity.Student">
<property name="stuNo" value="2"></property>
<property name="stuName" value="ls"></property>
<property name="stuAge" value="22"></property>
</bean>
2.构造器注入:通过构造方法赋值:【标签:constructor-arg】
<bean id="teacher" class="org.motinyu.entity.Teacher">
<!--property 使用的是set注入 constructor-arg 使用的是构造器注入 -->
<constructor-arg name="teacherName">
<value>zhangsan</value>
</constructor-arg>
<constructor-arg value="22" name="teacherAge"></constructor-arg>
</bean>
3.p命名空间注入:
在顶部引入p命名空间:
xmlns:p="http://www.springframework.org/schema/p"
<bean id="course" class="org.motinyu.entity.Course" p:courseHour="300" p:courseName="Java" p:teacher-ref="teacher">
</bean>
set,list,array,map,properties类型的属性注入:
<bean id="collectionType" class="org.motinyu.entity.AllCollectionType">
<property name="setElement">
<set>
<value>篮球</value>
<value>足球</value>
<value>排球</value>
</set>
</property>
<property name="listElement">
<list>
<value>张三</value>
<value>李四</value>
<value>王五</value>
</list>
</property>
<property name="arrayElement">
<array>
<value>风扇</value>
<value>水杯</value>
<value>纸巾</value>
</array>
</property>
<property name="mapElement">
<map>
<entry>
<key>
<value>tea</value>
</key>
<value>茶</value>
</entry>
<entry>
<key>
<value>kole</value>
</key>
<value>可乐</value>
</entry>
<entry>
<key>
<value>xuebi</value>
</key>
<value>雪碧</value>
</entry>
</map>
</property>
<property name="propsElement">
<props>
<prop key="door">门</prop>
<prop key="dark">椅子</prop>
<prop key="black">黑板</prop>
</props>
</property>
</bean>
给对象类型赋值 null:
<property name="stuName" >
<null/>
</property>
给对象类型赋值 “ ”
<property name="stuName" >
<value></value>
</propert
引用类型赋值使用ref:
<property name="teacher" ref="teacher"></property>
自动装配:
byName:自动寻找其他bean的id值=该类Course类的属性名。
<bean id="course" class="org.motinyu.entity.Course" autowire="byName">
通过注解的形式 将bean以及相应的属性值放入IOC容器中
配置扫描器:
<!-- 配置扫描器 -->
<context:component-scan base-package="org.motinyu.dao.impl">
</context:component-scan>
spring在启动时,会根据base-package 在该包中扫描所有类,查找这些类中是否有注解。如果有,则将该类加入Spring IOC容器中
注解@Component 细化:
dao层注解:@Repository
service层注解:@Service
控制器层注解:@Controller
配置声明式事务驱动。配置事务管理器,配置数据库相关:【我这里使用的是DBCP数据源,连接MySQL,别忘记mysql-connect-java-5.1.29.jar驱动包】
<!--配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
<property name="username" value="root"></property>
<property name="password" value=""></property>
<property name="maxActive" value="10"></property>
<property name="maxIdle" value="6"></property>
</bean>
<!-- 配置事务管理器TransactionManager -->
<bean id="TransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 声明式事务驱动 -->
<tx:annotation-driven transaction-manager="TransactionManager"/>