Spring实例化bean的方式Set注入构造函数注入静态工厂注入实例化工厂注入案例实践Set注入xml配置(spring也提供了基本数据类型的set注入方式)UserDao.javapublicclassUserDao{publicStringuserLogin(){return"我是UserDao中的userLogin()";}}UserService.javapublicclassUserService{//一定要提供属性的setter方法privateUserDaouserDao;publicvoiduserlogin(){Stringres=userDao.userLogin();系统输出。打印(资源);}publicvoidsetUserDao(UserDaouserDao){this.userDao=userDao;}}App.javaimportorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassApp{publicstaticvoidmain(String[]args){ApplicationContextapplicationContext=newClassPathXmlApplicationContext("spring-config.xml");UserServiceuserService=applicationContext.getBean("userService",UserService.class);userService.userlogin();}}构造函数注入xml配置(也提供基本数据类型、字符串等的注入)构造函数注入有三种形式:index属性是参数的顺序,如果只有一个参数index,可以不根据构造函数中的属性名称来设置name属性。type属性根据构造函数中属性的类型进行匹配。如果同一类型的属性不唯一,则注入的属性依次注入。UserServiceV2.java类提供构造函数/**实现构造函数注入@authorBestLiu**/publicclassUserServiceV2{privateUserDaouserDao;私有字符串名称;publicvoiduserlogin(){Stringres=userDao.userLogin();系统。out.println(res);System.out.println(名字);}publicUserServiceV2(UserDaouserDao,Stringname){super();this.userDao=userDao;this.name=名称;}}静态工厂注入xml配置静态工厂。javapublicclassStaticFactory{公共staticUserDaocreateuserDao(){returnnewUserDao();}}UserService.javapublicclassUserService{privateUserDaouserDao;publicvoiduserlogin(){Stringres=userDao.userLogin();System.out.println(res);}publicvoidsetUserDao(UserDaouserDao){this.userDao=userDao;}}tips:静态工厂注入就是IoC静态工厂和DIsetter注入,需要注入的属性对象是使用静态工厂创建的。2.4实例化工厂xml配置InstanceFactory.javapublic类InstanceFactory{publicUserDaocreateUserDao(){returnnewUserDao();}}tips:重点掌握集合,构造函数注入,理解工厂方法。在实际开发中,基本上都是使用set方法注入bean来扩大循环依赖问题就出现了,bean是通过构造函数注入的,相互依赖,导致bean无法实例化。注入的选择:在开发项目中,首选set方法注入,在构建对象的同时使用构造注入来完成依赖关系的建立。对象一旦建立就万事大吉了,但是如果要建立的对象关系很多,使用构造注入会在构造函数上留下一长串参数,而且不容易记忆。这时候使用Set注入会是一个不错的选择。使用Set注入可以有一个明确的名字,你可以知道注入的对象会是什么。像setxxx()这样的名字比记住某个参数在Constructor上的位置来代表某个对象要好。xml配置GoodsService.javapublicclassGoodsService{privateUserServiceuserService;/*publicGoodsService(UserServiceuserService){super();this.userService=userService;}*/publicvoidsetUserService(UserServiceuserService){this.userService=userService;}}UserService.javapublicclassUserService{privateGoodsServicegoodsService;/*publicUserService(GoodsServicegoodsService){super();this.goodsService=goodsService;}*/publicvoidsetGoodsService(GoodsServicegoodsService){this.goodsService=goodsService;}}