以下に、我々は最後の依存性の注入を受けています、
今日のプロジェクトの練習私は理解していない場合には、昨日のブログを書くことの練習を参照してください。
1.自動組立は何ですか?
すなわちをオートワイヤリング設定クラスとの関係に依存せずに!
依存手動設定に赤いボックスであるXMLベースの実装Bean自動アセンブリは、削除されなければなりません。
2.どのように自動組立?(原則)
依存性の注入:自動組立と手動アセンブリ
手動アセンブリ:関係は、一般に、そのような工法、セッターメソッドとして実装XML構成ファイルによって達成されます。
自動組立:
- byType:タイプ別のアセンブリ
- BYNAME:アセンブリ名によって、あなたは、setterメソッドが必要
< ビーンID = "UserServiceの" クラス= "com.nenu.service.impl.UserServiceImpl" autowire = "BYNAME" >構成ファイル内の最初の属性指定applicationContext.xmlをautowireの(すなわち、自動組立方法)
その後に対応する実装クラスのコンストラクタやセッターUserServiceImpl UserServiceのインターフェイスを追加!
それが問題で、自動組立のためのスタートの例を聞かせていない理解していません!
A、XMLの3つの方法Beanの自動組立を達成します
1.constructor
まずapplicationContext.xmlを読み取り:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- Spring配置依赖关系,两种方法任选其一 --> <bean id="UserService" class="com.nenu.service.impl.UserServiceImpl" autowire="constructor"> <!--第一种方式:setter方法--> <!--<property name="userDao" ref="UserDao"/>--> <!--第二种方式--> <!--<constructor-arg name="userDao" ref="UserDao"/>--> </bean> <bean id="UserDao" class="com.nenu.dao.impl.UserDaoImpl"/> </beans>
其次在UserServiceImpl中添加constructor方法,即:
public UserServiceImpl(){}
进行测试:
成功!!!
2.byType
首先applicationContext.xml改为:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- Spring配置依赖关系,两种方法任选其一 --> <bean id="UserService" class="com.nenu.service.impl.UserServiceImpl" autowire="byType"> <!--第一种方式:setter方法--> <!--<property name="userDao" ref="UserDao"/>--> <!--第二种方式--> <!--<constructor-arg name="userDao" ref="UserDao"/>--> </bean> <bean id="UserDao" class="com.nenu.dao.impl.UserDaoImpl"/> </beans>
其次在UserServiceImpl中添加setter方法,即:
//这是一个setter方法,设置userDao属性的值
public void setUserDao(UserDaoImpl userDao) {
this.userDao = userDao;
}
测试:
成功!!!
3.byName
首先applicationContext.xml改为:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- Spring配置依赖关系,两种方法任选其一 --> <bean id="UserService" class="com.nenu.service.impl.UserServiceImpl" autowire="byName"> <!--第一种方式:setter方法--> <!--<property name="userDao" ref="UserDao"/>--> <!--第二种方式--> <!--<constructor-arg name="userDao" ref="UserDao"/>--> </bean> <bean id="userDao" class="com.nenu.dao.impl.UserDaoImpl"/> </beans>
PS:注意这里bean id从UserDao改为了userDao(大小写问题),为了与UserServiceImpl中的userDao对象名称对应
其次在UserServiceImpl中添加setter方法,即:
//这是一个setter方法,设置userDao属性的值
public void setUserDao(UserDaoImpl userDao) {
this.userDao = userDao;
}
测试:
成功!!!
4.实验
那么byName和ByType有何区别?下面我们做两个实验:
实验一:
把UserDao的bean的配置删掉,发现这三种配置方式的测试结果不通过,显示空指针。
也就是这句话:
<bean id="userDao" class="com.nenu.dao.impl.UserDaoImpl"/>
实验二:
把setter方法的方法名修改掉,发现byName测试不通过,byType可以通过测试:
也就是把setter方法改为:
//这是一个setter方法,设置userDao属性的值 public void setUserDao2(UserDaoImpl userDao) { this.userDao = userDao; }也就是byName找名称一样的,byType找类型符合的。
二、如果xml文件中指定一种自动配置方式,就不需要挨个bean配置,只在beans标签中加入即可:
例如加入default-autowire:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" default-autowire="byName">
三、总结
基于实现xml的bean的自动装配这个小知识点就到此为止啦hhh,小伙伴们有问题欢迎一起探讨!加油~