IOC入门案例
有User类
public class User { public void add() { System.out.println("add.........."); } }
在Spring的配置文件bean1.xml中如下配置
<bean id="user" class="cn.itcast.ioc.User"></bean>
如下使用
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); User user=(User)context.getBean("user"); System.out.println(user); user.add();
Bean的标签:scope
<bean id="user" class="cn.itcast.ioc.User" scope="prototype"></bean>
如果不配置scope默认为singleton
属性注入
有参构造注入
比如类PropertyDemo1,有属性username
private String username; //有参构造函数 public PropertyDemo1(String username){ this.username=username; }
通过如下配置为其注入属性
<bean id="demo" class="cn.itcast.property.PropertyDemo1"> <constructor-arg name="hello" value="小王小马"></constructor-arg> </bean>
Set方法注入对象类型属性
有类UserService
public class UserService { //1 定义dao类型属性 private UserDao userDao; //2 生成set方法 public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void add() { System.out.println("service........."); userDao.add(); } }
<!-- 1 配置service和dao对象 --> <bean id="userDao" class="cn.itcast.ioc.UserDao"></bean> <bean id="userService" class="cn.itcast.ioc.UserService"> <property name="userDao" ref="userDao"></property> </bean>
name :UserService中UserDao属性名称
ref,UserDao类在bean中的id值。
注解开发
目的:使用注解的方式替代bean配置
比如,上面的User可以改成如下
@Component(value="user") public class User{ ..... }
说明:这个注解就等效于
<bean id="user" class="....">
Component,Service都是一个意思。
配置:在原来配置bean的文件中使用
<context:component-scan base-package="cn.itcast"></context:component-scan>
base-package可以学包名,也可以是开头为cn.itcast的所有包。
注解方式使用事务
<!-- 第一步配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 第二步 开启事务注解 --> <tx:annotation-driven transaction-manager="transactionManager"/>
在需要使用事务的方法上面使用@Transactional
注解方式注入属性
上面的UserService,不使用配置,使用注解改写成
@Component(value="id_of_dao") public class UserDao { public void add() { System.out.println("dao........."); } } @Service(value="userService") public class UserService { @Resource(name="id_of_dao") private UserDao db; public void add() { System.out.println("service..........."); db.add(); } } // 测试代码 @Test public void testService() { ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); UserService userService = (UserService) context.getBean("userService"); userService.add(); } //输出 service........... dao........