(自動組立XML実装豆に基づいて)春の日の練習日のスプリング実践(SpringDI:依存性注入)

以下に、我々は最後の依存性の注入を受けています、

 今日のプロジェクトの練習私は理解していない場合には、昨日のブログを書くことの練習を参照してください。

春の練習日(SpringDI:依存性注入)

 

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,小伙伴们有问题欢迎一起探讨!加油~

 

おすすめ

転載: www.cnblogs.com/yangf428/p/12297540.html