IOC容器创建对象方式
1) 调用无参数构造器
<bean id="user1" class="com.text.entity.UserEntity" scope="prototype" />
2) 带参数构造器
<bean id="user2" class="com.text.entity.UserEntity">
<constructor-arg name="name" type="java.lang.String" value="张三"></constructor-arg>
<constructor-arg name="age" type="java.lang.Integer" value="18"></constructor-arg>
</bean>
3) 工厂创建对象
<!-- 通过实例工厂方法创建 -->
<bean id="factory" class="com.text.entity.ObjectFactory"></bean>
<bean id="user3" factory-bean="factory" factory-method="getInstance"></bean>
<!-- 通过静态工厂方法创建 -->
<bean id="user4" class="com.text.entity.ObjectFactory" factory-method="getStaticInstance"></bean>
依赖注入
1) 通过构造函数
2) 通过set方法给属性注入值(service中需要有Dao类的setter方法,实现原理是利用java反射机制。)
<!-- dao instance --> <bean id="userDao" class="cn.text.UserDao"></bean>
<!-- service instance -->
<bean id="userService" class="cn.text.UserService">
<property name="userDao" ref="userDao"></property>
</bean>
3) p名称空间
<!- - 给对象属性注入值: # p 名称空间给对象的属性注入值 (spring3.0以上版本才支持) -->
<bean id="userDao" class="cn.text.UserDao"></bean>
<bean id="userService" class="cn.text.UserService" p:userDao-ref="userDao"></bean>
<!-- 传统的注入:
<bean id="user" class="cn.text.User" >
<property name="name" value="xxx"></property>
</bean> -->
<!-- p名称空间优化后 -->
<bean id="user" class="cn.text.User" p:name="Jack0001"></bean>
4) 注解
注解方式可以简化spring的IOC容器的配置!
使用注解步骤:
1)先引入context名称空间 xmlns:context="http://www.springframework.org/schema/context"
2)开启注解扫描
<context:component-scan base-package="com.text"></context:component-scan>
3)使用注解
通过注解的方式,把对象加入ioc容器。
创建对象以及处理对象依赖关系,相关的注解:
@Component 指定把一个对象加入IOC容器
@Repository 作用同@Component; 在持久层使用
@Service 作用同@Component; 在业务逻辑层使用
@Controller 作用同@Component; 在控制层使用
@Resource 属性注入
总结:
1) 使用注解,可以简化配置,且可以把对象加入IOC容器,及处理依赖关系(DI)
2) 注解可以和XML配置一起使用。如果注解和xml同时配置同一个bean,那么注解无效,会先走xml