1.概要:什么为Ioc,以及原理
2.Ioc的实现
2.1准备工作
2.1.1 jar 包:
此外,还加上commons-logging和log4j日志包
2.1.2用idea创建工程
2.1.3勾选自动生成目录结构,否则要自己创建
2.1.4将jar包放入到项目中
2.1.5需要注意的是 如果是在test目录里面写测试代码,jar包一定也要添加到spring_test里面去,否者会一直报错创建不了bean的错误
2.2 开始干活
a.基于xml的方式进行注入
2.2.1对无参构造函数进行注入
a.在java下创建User类
//1.创建对象public class User { public void add(){ System.out.println("添加一个用户"); }}
b. 在resources下创建bean1.xml,添加如下
c. 在 test目录下创建TestIoc进行测试 ,点击运行
//3.测试public class TestIoc { @Test public void test(){ //加载xml文件 ApplicationContext ac=new ClassPathXmlApplicationContext("bean1.xml"); User user = (User) ac.getBean("user"); user.add(); }}
2.2.2对有参构造函数进行注入
a.创建类
/** * 构造函数注入 */public class PropertyDemo1 { public PropertyDemo1(String name) { this.name = name; } private String name; public void test(){ System.out.println("my name is :"+this.name); }}
b.配置文件
c.测试
@Testpublic void test(){ //加载xml文件 ApplicationContext ac=new ClassPathXmlApplicationContext("bean1.xml"); PropertyDemo1 user = (PropertyDemo1) ac.getBean("name"); user.test();}
2.2.3对set方法进行注入
a.创建类
public class Book { public void setName(String name) { this.name = name; } private String name; public void test(){ System.out.println("书名为: "+this.name); }}
b.配置文件
c.测试
@Testpublic void test(){ //加载xml文件 ApplicationContext ac=new ClassPathXmlApplicationContext("bean1.xml"); PropertyDemo1 user = (PropertyDemo1) ac.getBean("name"); user.test();}
2.2.4对对象进行注入
a.创建类
public class BookService { public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; } private BookDao bookDao; public void add(){ bookDao.add(); }}
public class BookDao { public void add(){ System.out.println("添加书籍 "); }}
b.配置文件
c.测试
@Testpublic void test3(){ //加载xml文件 ApplicationContext ac=new ClassPathXmlApplicationContext("bean1.xml"); BookService user = (BookService) ac.getBean("bookService"); user.add();}
2.2.5对集合进行注入
a.创建类
public class Person { public void setArr(String[] arr) { this.arr = arr; } public void setMap(Mapmap) { this.map = map; } public void setList(List list) { this.list = list; } private String[] arr; private Map map; private List list; public void test(){ System.out.println("arr is "+arr); System.out.println("map is "+map); System.out.println("list is "+list); }}
b.配置文件
123 234 34 123
asd zc vfs ghj
c.测试
@Testpublic void test4(){ //加载xml文件 ApplicationContext ac=new ClassPathXmlApplicationContext("bean1.xml"); Person user = (Person) ac.getBean("arr"); user.test();}
b.基于注解的注入
b.1 创建新的xml文件 , xml配置,下面的代码会扫描具体包下的注解进行自动注入。
b.2类中的注解
//业务层使用userService注解@Service(value = "userService")public class UserService { //使用了注解注入后就不用使用set方法了,比xml注入便捷许多 //使用Autowired自动注入// @Autowired,只要是有UserDao这个类,就会注入,跟@Repository(value = "userDao")无关// private UserDao userDao; //指定@Repository(value = "userDao")的类 @Resource(name = "userDao") private UserDao userDao; public void add(){ userDao.add(); }}
//持久层的注解为Repository@Repository(value = "userDao")public class UserDao { public void add(){ System.out.println("UserDao add user"); }}
b.3测试
@org.junit.Testpublic void testService(){ ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml"); UserService user = (UserService) context.getBean("userService"); user.add();}