列举网站建设的SEO策略,阿虎手机站,绿色商城网站模板,c 做网站怎么发布#x1f34e;道阻且长#xff0c;行则将至。#x1f353; 上一篇#xff1a;Spring《二》bean的实例化与生命周期 下一篇#xff1a;敬请期待 目录一、setter注入#x1f349;1.注入引用数据类型2.注入简单数据类型二、构造器注入#x1f34a;1.注入引用数据类型2.简单数… 道阻且长行则将至。 上一篇Spring《二》bean的实例化与生命周期 下一篇敬请期待 目录一、setter注入1.注入引用数据类型2.注入简单数据类型二、构造器注入1.注入引用数据类型2.简单数据类型三、自动配置1.自动装配方式2.自动装配的配置2.1 按类型注入2.2 按名称注入3.集合类型注入向一个类中传递数据的方式有普通方法(set方法)和构造方法。Spring就相对应地为我们提供了两种注入方式setter注入和构造器注入。同时也包括简单类型和引用类型对象注入。 *setter方法构造器引用类型类中添加setter方法配置文件使用propertyref引用对象类中添加构造器方法配置文件使用constructor-argref引用对象基本类型类中添加setter方法配置文件使用propertyvalue值类中添加构造器方法配置文件使用constructor-argvalue值一、setter注入 在Spring入门篇中进行的DI依赖注入就是setter方法。 我们先创建好Maven项目和上一篇类似添加好项目依赖添加Spring配置文件。在项目中添加BookDao、BookDaoImpl、UserDao、UserDaoImpl、BookService和BookServiceImpl类以及AppForDISet运行类。
public class AppForDISet {public static void main(String[] args) {ApplicationContext ctx new ClassPathXmlApplicationContext(mySpringSetFile.xml);BookService bookService (BookService) ctx.getBean(bookService);bookService.save();}
}1.注入引用数据类型
在bookServiceImpl对象中注入bookDao userDao。
在BookServiceImpl中声明属性并提供setter方法同时在save方法中调用他们俩的save。
public class BookServiceImpl implements BookService{private BookDao bookDao;private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao userDao;}public void setBookDao(BookDao bookDao) {this.bookDao bookDao;}public void save() {System.out.println(book service save ...);bookDao.save();userDao.save();}
}在配置文件中使用property进行注入配置
bean idbookServiceclassDemo.Srevice.impl.BookServiceimplproperty namebookDao refbookDao/property nameuserDao refuserDao/
/bean运行注入成功
2.注入简单数据类型
给BookDaoImpl注入一些简单数据类型的数据。
声明属性并提供setter方法
private String databaseName;
private int connectionNum;
public void setDatabaseName(String databaseName) {this.databaseName databaseName;
}
public void setConnectionNum(int connectionNum) {this.connectionNum connectionNum;
}在配置文件中使用property注入
bean idbookDao classDemo.Srevice.impl.BookServiceimplproperty namedatabaseName valuemysql/property nameconnectionNum value10/
/bean修改一下这个类的save方法System.out.println(Book dao save ...databaseName:connectionNum);运行注入成功 二、构造器注入 构造方法注入 可以继续使用前面的案例将前面的注入删除或者注释掉。
1.注入引用数据类型
将BookServiceImpl类中的bookDao userDao修改成使用构造器的方式注入。使用快捷键altinsert吧
public BookServiceimpl(BookDao bookdao, UserDao userDao) {this.bookdao bookdao;this.userDao userDao;
}在Spring配置文件里配置构造方式注入 bean idbookService classDemo.Srevice.impl.BookServiceimpl
!-- property namebookdao refbookDao/--
!-- property nameuserDao refuserDao/--constructor-arg namebookdao refbookDao/constructor-arg nameuserDao refuserDao//bean注入成功
注意这种方法在构造器和配置文件中的参数顺序不能乱交换两个参数前后位置会提示警告 bean idbookService classDemo.Srevice.impl.BookServiceimpl
!-- property namebookdao refbookDao/--
!-- property nameuserDao refuserDao/--constructor-arg nameuserDao refuserDao/constructor-arg namebookdao refbookDao//beanError creating bean with name ‘bookService’ defined in class path resource [mySpringSetFile.xml]: Unsatisfied dependency expressed through constructor parameter 0: Could not convert argument value of type [Demo.Dao.impl.UserDaoimpl] to required type [Demo.Dao.BookDao]: Failed to convert value of type ‘Demo.Dao.impl.UserDaoimpl’ to required type ‘Demo.Dao.BookDao’; nested exception is java.lang.IllegalStateException: Cannot convert value of type ‘Demo.Dao.impl.UserDaoimpl’ to required type ‘Demo.Dao.BookDao’: no matching editors or conversion strategy found
2.简单数据类型
修改BookDaoImpl类添加构造方法
public BookDaoImpl(String databaseName, int connectionNum) {this.databaseName databaseName;this.connectionNum connectionNum;
}修改配置文件
bean idbookDao classDemo.Dao.impl.BookDaoimplconstructor-arg namedatabaseName valuemysql/constructor-arg nameconnectionNum value666/
!-- property namedatabaseName valuemysql/--
!-- property nameconnectionNum value10/--
/bean构造函数中方法的参数名发生变化后配置文件中的name属性也需要跟着变为了避免这种情况可以选择type或者index
根据数据类型
bean idbookDao classDemo.Dao.impl.BookDaoimplconstructor-arg typeint value10/constructor-arg typejava.lang.String valuemysql/
!-- property namedatabaseName valuemysql/--
!-- property nameconnectionNum value10/--
/bean根据参数位置
bean idbookDao classDemo.Dao.impl.BookDaoimplconstructor-arg index0 valuemysql/constructor-arg index1 value10/
!-- property namedatabaseName valuemysql/--
!-- property nameconnectionNum value10/--
/bean运行注入成功
同样的对于使用name的方法不能交换参数位置 错误的把配置文件中第一个参数给了构造器第一个参数。
三、自动配置
前面的Spring注入方法仍然很麻烦Spring提供了自动配置方法。就是IOC容器根据bean所依赖的资源在容器中自动查找并注入到bean中。用于引用类型依赖注入不能对简单类型进行操作。
1.自动装配方式
1.按类型常用byType 2.按名称byName 3.按构造方法constructor 4.不启用自动装配no
2.自动装配的配置
再次把前面案例的注入删除。在bean中添加autowire属性。
2.1 按类型注入
bean idbookService classDemo.Srevice.impl.BookServiceimpl autowirebyType/1.需要注入属性的类中对应属性的setter方法不能省略。 2.被注入的对象必须要被Spring的IOC容器管理。 3.按照类型在Spring的IOC容器中如果找到多个对象会报NoUniqueBeanDefinitionException
2.2 按名称注入
如果一个类型在IOC中有多个对象这个时候就需要按照名称注入变量名与配置耦合不推荐使用:
bean idbookService classcom.itheima.service.impl.BookServiceImpl autowirebyName/按照名称去找对应的bean对象找不到则注入Null。 自动装配优先级低于setter注入与构造器注入同时出现时自动装配配置失效。
3.集合类型注入
在bean中使用property根据集合类型数组、List、Set、Map、Properties设置name参数。 3.1 注入数组类型数据
property namearrayarrayvalue100/valuevalue200/valuevalue300/value/array
/property3.2 注入List类型数据
property namelistlistvalueitcast/valuevalueitheima/valuevalueboxuegu/valuevaluechuanzhihui/value/list
/propertyList的底层也是通过数组实现的所以list和array标签是可以混用。
3.3 注入Set类型数据
property namesetsetvalueitcast/valuevalueitheima/valuevalueboxuegu/valuevalueboxuegu/value/set
/property3.4 注入Map类型数据
property namemapmapentry keycountry valuechina/entry keyprovince valuehenan/entry keycity valuekaifeng//map
/property3.5 注入Properties类型数据
property namepropertiespropsprop keycountrychina/propprop keyprovincehenan/propprop keycitykaifeng/prop/props
/property3.6 property标签表示setter方式注入构造方式注入constructor-arg标签内部也可以写array、list、set、map、props标签。 集合中要添加引用类型只需要把value标签改成ref标签。 ☕物有本末事有终始知所先后。 ☝☝☝☝☝我的CSDN☝☝☝☝☝☝