Spring IOC的基础相关知识

目录

  • Spring IOC的定义
  • 依赖注入的三种方式
  • 各种集合类型的属性注入
  • 特殊值空,null的注入
  • ref类型(引用类型)的自动装配
  • 使用注解定义bean
  • 使用注解实现声明式事务

Spring IOC的定义

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的注入

给对象类型赋值 null:

<property name="stuName" >
   		<null/>
</property>

给对象类型赋值 “ ”

<property name="stuName" >
   	<value></value>
</propert

ref类型(引用类型)的自动装配

引用类型赋值使用ref:

 <property name="teacher" ref="teacher"></property>  

自动装配:
byName:自动寻找其他bean的id值=该类Course类的属性名。

<bean id="course" class="org.motinyu.entity.Course" autowire="byName">

使用注解定义bean

通过注解的形式 将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"/>

你可能感兴趣的:(Spring,spring,bean,ioc)