Правільны спосаб надаць залежнасці бацькоўскіх класаў з Spring анатацыямі

У мяне наступны код -

<�Моцны> Dao.java

@Component
public class Dao extends NamedParameterJdbcDaoSupport {

}

<�Моцны> dbContext.xml

 
            
            
            
            
        

<�Моцны> applicationContext.xml


Праблема заключаецца ў тым, што NamedParameterJdbcDaoSupport патрэбен крыніца дадзеных для таго, каб працаваць. Паколькі гэта ўласцівасць вышэйшага класа, а не мой уласны клас адзіны спосаб, якім я мог думаць, каб зрабіць яго праца -

@Component
public class Dao extends NamedParameterJdbcDaoSupport {
    @Autowired
    public void setDataSource(DataSource dataSource) {
        super.setDataSource(dataSource);
    }
}

Гэта вельмі непрыгожа. Ці магу я пазначыць, што я хачу autowire ўсіх уласцівасцяў маёй фасолі? Нешта накшталт -

@Component(default-autowire="byType")
public class Dao extends NamedParameterJdbcDaoSupport {

}

Is this possible in Spring? Alternatively what is the most elegant way to inject super class dependencies?

Edit: I already know this can be done using xml which I am presently using. I'd like to know the best that can be done using annotations only.

4

8 адказы

Не абавязкова адказ, які вы шукалі, але я хацеў бы зрабіць гэта з дапамогай пасярэдніка суперкласса.

public abstract class AbstractDao extends NamedParameterJdbcDaoSupport {
    @Autowired
    public void setDataSource(DataSource dataSource) {
        super.setDataSource(dataSource);
    }
}

@Component
public class Dao extends AbstractDao {
}
5
дададзена
Іншае рашэнне ўкараніць шаблон замест налады DaoSupport : stackoverflow.com/a/21992433/173149
дададзена аўтар gavenkoa, крыніца
Не дзейнічае ў Spring версіі 4. Метад setDataSource() пазначаны як канчатковы і ня магчыма адмяніць.
дададзена аўтар shobull, крыніца

Не абавязкова адказ, які вы шукалі, але я хацеў бы зрабіць гэта з дапамогай пасярэдніка суперкласса.

public abstract class AbstractDao extends NamedParameterJdbcDaoSupport {
    @Autowired
    public void setDataSource(DataSource dataSource) {
        super.setDataSource(dataSource);
    }
}

@Component
public class Dao extends AbstractDao {
}
5
дададзена
Іншае рашэнне ўкараніць шаблон замест налады DaoSupport : stackoverflow.com/a/21992433/173149
дададзена аўтар gavenkoa, крыніца
Не дзейнічае ў Spring версіі 4. Метад setDataSource() пазначаны як канчатковы і ня магчыма адмяніць.
дададзена аўтар shobull, крыніца

Я шукаў нешта падобнае пры выкарыстанні падтрымкі Spring, Hibernate. Там няма ніякага спосабу дадання (або змяненняў) праводкі ў суперкласса без падкласаў і пераазначэння неабходнага метаду. Ці дэкларатыўны падыход падкласаў і забеспячэння <�я> реф </я> значэнне для патрэбных уласцівасцяў з дапамогай XML.

Усе, што менш «непрыгожа», верагодна, будзе менш празрыстым. Такім чынам, прапанаванае рашэнне Zutty ўпісваецца лепш тут, паколькі гэта выключае неабходнасць пераазначэння у кожнай рэалізацыі Дао.

1
дададзена

Я шукаў нешта падобнае пры выкарыстанні падтрымкі Spring, Hibernate. Там няма ніякага спосабу дадання (або змяненняў) праводкі ў суперкласса без падкласаў і пераазначэння неабходнага метаду. Ці дэкларатыўны падыход падкласаў і забеспячэння <�я> реф </я> значэнне для патрэбных уласцівасцяў з дапамогай XML.

Усе, што менш «непрыгожа», верагодна, будзе менш празрыстым. Такім чынам, прапанаванае рашэнне Zutty ўпісваецца лепш тут, паколькі гэта выключае неабходнасць пераазначэння у кожнай рэалізацыі Дао.

1
дададзена

Калі гэта патрабуецца для вашага класа, каб працаваць (і гэта, верагодна, знаходзіцца ў DAO), ён павінен быць канструктар аргумент не з'яўляецца уласцівасцю. Так як вы аўтаматычнае звязванне, вам трэба ні. Зрабіць гэта абаронены у бацькоўскай і autowire яго. Ваш дзіця будзе мець спасылку на яго.

0
дададзена

Калі гэта патрабуецца для вашага класа, каб працаваць (і гэта, верагодна, знаходзіцца ў DAO), ён павінен быць канструктар аргумент не з'яўляецца уласцівасцю. Так як вы аўтаматычнае звязванне, вам трэба ні. Зрабіць гэта абаронены у бацькоўскай і autowire яго. Ваш дзіця будзе мець спасылку на яго.

0
дададзена

Гэта можа быць зроблена празрыста з дапамогай канфігурацыі XML. Калі вы хочаце выкарыстоўваць анатацыі, выклік супер, як вы цяпер, верагодна, лепшы спосаб пайсці.

0
дададзена

Гэта можа быць зроблена празрыста з дапамогай канфігурацыі XML. Калі вы хочаце выкарыстоўваць анатацыі, выклік супер, як вы цяпер, верагодна, лепшы спосаб пайсці.

0
дададзена