|
|
miàn xiàng fāng miàn biān chéng: aspectorientedprogrammingaop wéi aspectorientedprogramming de suō xiě, yì wéi: miàn xiàng fāng fǎ biān chéng, kě yǐ tōng guò yù biān yì fāng shì hé yùn xíng qī dòng tài dài lǐ shí xiàn zài bù xiū gǎi yuán dài mǎ de qíng kuàng xià gěi chéng xù dòng tài tǒng yī tiān jiā gōng néng de yī zhǒng jì shù。
aop shì oop de yán xù, shì aspectorientedprogramming de suō xiě, yì sī shì miàn xiàng fāng miàn biān chéng。 aop shí jì shì gof shè jì mó shì de yán xù, shè jì mó shì zī zī bù juàn zhuī qiú de shì diào yòng zhě hé bèi diào yòng zhě zhī jiān de jiě 'ǒu, aop kě yǐ shuō yě shì zhè zhǒng mù biāo de yī zhǒng shí xiàn。
jǔ lì: jiǎ shè yòu zài yī gè yìng yòng xì tǒng zhōng, yòu yī gè gòng xiǎng de shù jù bì xū bèi bìng fā tóng shí fǎng wèn, shǒu xiān, jiāng zhè gè shù jù fēng zhuāng zài shù jù duì xiàng zhōng, chēng wéi dataclass, tóng shí, jiāng yòu duō gè fǎng wèn lèi, zhuān mén yòng yú zài tóng yī shí kè fǎng wèn zhè tóng yī gè shù jù duì xiàng。
wèile wán chéng shàng shù bìng fā fǎng wèn tóng yī zī yuán de gōng néng, xū yào yǐn rù suǒ lock de gài niàn, yě jiù shì shuō, mǒu gè shí kè, dāng yòu yī gè fǎng wèn lèi fǎng wèn zhè gè shù jù duì xiàng shí, zhè gè shù jù duì xiàng bì xū shàng suǒ locked, yòng wán hòu jiù lì jí jiě suǒ unlocked, zài gōng qí tā fǎng wèn lèi fǎng wèn。
shǐ yòng chuán tǒng de biān chéng xí guàn, wǒ men huì chuàng jiàn yī gè chōu xiàng lèi, suǒ yòu de fǎng wèn lèi jì chéng zhè gè chōu xiàng fù lèi, rú xià:
abstractclassworker{
abstractvoidlocked();
abstractvoidaccessdataobject();
abstractvoidunlocked();
}
quē diǎn:
accessdataobject() fāng fǎ xū yào yòu “ suǒ ” zhuàng tài zhī lèi de xiāng guān dài mǎ。
java zhǐ tí gōng liǎo dān jì chéng, yīn cǐ jù tǐ fǎng wèn lèi zhǐ néng jì chéng zhè gè fù lèi, rú guǒ jù tǐ fǎng wèn lèi hái yào jì chéng qí tā fù lèi, bǐ rú lìng wài yī gè rú worker de fù lèi, jiāng wú fǎ fāng biàn shí xiàn。
zhòng yòng bèi dǎ zhé kòu, jù tǐ fǎng wèn lèi yīn wéi yě bāo hán“ suǒ” zhuàng tài zhī lèi de xiāng guān dài mǎ, zhǐ néng bèi zhòng yòng zài xiāng guān yòu“ suǒ” de chǎng hé, zhòng yòng fàn wéi hěn zhǎi。
zǎi xì yán jiū zhè gè yìng yòng de“ suǒ”, tā qí shí yòu xià liè tè xìng:
“ suǒ” gōng néng bù shì jù tǐ fǎng wèn lèi de shǒu yào huò zhù yào gōng néng, fǎng wèn lèi zhù yào gōng néng shì fǎng wèn shù jù duì xiàng, lì rú dú qǔ shù jù huò gēnggǎi dòng zuò。
“ suǒ” xíng wéi qí shí shì hé jù tǐ fǎng wèn lèi de zhù yào gōng néng kě yǐ dú lì、 qū fēn kāi lái de。
“ suǒ” gōng néng qí shí shì zhè gè xì tǒng de yī gè zòng xiàng qiē miàn, shè jí xǔ duō lèi、 xǔ duō lèi de fāng fǎ。 rú xià tú:
yīn cǐ, yī gè xīn de chéng xù jié gòu yīnggāi shì guān zhù xì tǒng de zòng xiàng qiē miàn, lì rú zhè gè yìng yòng de“ suǒ” gōng néng, zhè gè xīn de chéng xù jié gòu jiù shì aspect( fāng miàn)
zài zhè gè yìng yòng zhōng,“ suǒ” fāng miàn( aspect) yīnggāi yòu yǐ xià zhí zé:
tí gōng yī xiē bì bèi de gōng néng, duì bèi fǎng wèn duì xiàng shí xiàn jiā suǒ huò jiě suǒ gōng néng。 yǐ bǎo zhèng suǒ yòu zài xiū gǎi shù jù duì xiàng de cāo zuò zhī qián néng gòu diào yòng lock() jiā suǒ, zài tā shǐ yòng wán chéng hòu, diào yòng unlock() jiě suǒ。
aop yìng yòng fàn wéi
hěn míng xiǎn, aop fēi cháng shì hé kāi fā j2ee róng qì fú wù qì, mù qián jboss4.0 zhèng shì shǐ yòng aop kuàng jià jìn xíng kāi fā。
jù tǐ gōng néng rú xià:
authentication quán xiàn
caching huǎn cún
contextpassing nèi róng chuán dì
errorhandling cuò wù chǔlǐ
lazyloading lǎn jiā zài
debugging tiáoshì
logging,tracing,profilingandmonitoring jì lù gēn zōng yōu huà jiàozhǔn
performanceoptimization xìng néng yōu huà
persistence chí jiǔ huà
resourcepooling zī yuán chí
synchronization tóng bù
transactions shì wù
【 aop yòu bì yào má?】
dāng rán, shàng shù yìng yòng fàn lì zài méi yòu shǐ yòng aop qíng kuàng xià, yě dé dào liǎo jiě jué, lì rú jboss3.xxx yě tí gōng liǎo shàng shù yìng yòng gōng néng, dàn shì méi yòu shǐ yòng aop。
dàn shì, shǐ yòng aop kě yǐ ràng wǒ men cóng yī gè gèng gāo de chōu xiàng gài niàn lái lǐ jiě ruǎn jiàn xì tǒng, aop yě xǔ tí gōng yī zhǒng yòu jià zhí de gōng jù。 kě yǐ zhè me shuō: yīn wéi shǐ yòng aop jié gòu, xiàn zài jboss4.0 de yuán mǎ yào bǐ jboss3.x róng yì lǐ jiě duō liǎo, zhè duì yú yī gè dà xíng fù zá xì tǒng lái shuō shì fēi cháng zhòng yào de。
cóng lìng wài yī gè fāng miàn shuō, hǎo xiàng bù shì suǒ yòu de réndōu xū yào guān xīn aop, tā kě néng shì yī zhǒng jià gòu shè jì de xuǎn zé, rú guǒ xuǎn zé j2ee xì tǒng, aop guān zhù de shàng shù tōng yòng fāng miàn dōuyǐ jīng bèi j2ee róng qì shí xiàn liǎo, j2ee yìng yòng xì tǒng kāi fā zhě kě néng xū yào gèng duō dì guān zhù hángyè yìng yòng fāng miàn aspect。
【 aop jù tǐ shí xiàn】
aop shì yī gè gài niàn, bìng méi yòu shè dìng jù tǐ yǔ yán de shí xiàn, tā néng kè fú nà xiē zhǐ yòu dān jì chéng tè xìng yǔ yán de quē diǎn( rú java), mù qián aop jù tǐ shí xiàn yòu yǐ xià jǐ gè xiàng mù:
aspectj(tm): chuàng jiàn yú xeroxparc. yòu jìn shí nián lì shǐ, chéng shú
quē diǎn: guò yú fù zá; pò huài fēng zhuāng; xū yào zhuān mén de java biān yì qì。
dòng tài aop: shǐ yòng jdk de dòng tài dài lǐ api huò zì jié mǎ bytecode chǔlǐ jì shù。
jī yú dòng tài dài lǐ api de jù tǐ xiàng mù yòu:
jboss4.0jboss4.0 fú wù qì
nanning zhè shì yǐ zhōng guó nán níng mìng míng de yī gè xiàng mù, gǎo bù qīng chǔ wèishénme hé zhōng guó xiāng guān? shì zhōng guó rén fā qǐ de?
jī yú zì jié mǎ de xiàng mù yòu:
aspectwerkz, spring
miàn xiàng agent de biān chéng: agentorentedprogarmming lái zì rén gōng zhì néng lǐng yù, hào chēng dì liù dài biān chéng yǔ yán, yǔ miàn xiàng duì xiàng de biān chéng : jí: oop xiāng bǐ, tā gèng jù zhù dòng xìng、 xué xí xíng、 xié tóng xìng。 jù tǐ kě chá zhǎo agent jì shù xiāng guān zhī shí。 |
|
aop:advance online publication. zài xiàn zá zhì chū bǎn wù。
miàn xiàng qiē miàn biān chéng: AspectOrientedProgramming
aop shì OOP de yán xù, shì AspectOrientedProgramming de suō xiě, yì sī shì miàn xiàng qiē miàn biān chéng。 kě yǐ tōng guò yù biān yì fāng shì hé yùn xíng qī dòng tài dài lǐ shí xiàn zài bù xiū gǎi yuán dài mǎ de qíng kuàng xià gěi chéng xù dòng tài tǒng yī tiān jiā gōng néng de yī zhǒng jì shù。 aop shí jì shì GoF shè jì mó shì de yán xù, shè jì mó shì zī zī bù juàn zhuī qiú de shì diào yòng zhě hé bèi diào yòng zhě zhī jiān de jiě 'ǒu, aop kě yǐ shuō yě shì zhè zhǒng mù biāo de yī zhǒng shí xiàn。
zài Spring zhōng tí gōng liǎo miàn xiàng qiē miàn biān chéng de fēng fù zhī chí, yǔn xǔ tōng guò fēn lí yìng yòng de yè wù luó ji yǔ xì tǒng jí fú wù( lì rú shěn jì( auditing) hé shì wù( transaction) guǎn lǐ) jìn xíng nèi jù xìng de kāi fā。 yìng yòng duì xiàng zhǐ shí xiàn tā men yīnggāi zuò de héng héng wán chéng yè wù luó ji héng héng jǐn cǐ 'ér yǐ。 tā men bìng bù fù zé( shèn zhì shì yì shí) qí tā de xì tǒng jí guān zhù diǎn, lì rú rì zhì huò shì wù zhī chí。
yìng yòng jǔ lì: jiǎ shè yòu zài yī gè yìng yòng xì tǒng zhōng, yòu yī gè gòng xiǎng de shù jù bì xū bèi bìng fā tóng shí fǎng wèn, shǒu xiān, jiāng zhè gè shù jù fēng zhuāng zài shù jù duì xiàng zhōng, chēng wéi DataClass, tóng shí, jiāng yòu duō gè fǎng wèn lèi, zhuān mén yòng yú zài tóng yī shí kè fǎng wèn zhè tóng yī gè shù jù duì xiàng。
wèile wán chéng shàng shù bìng fā fǎng wèn tóng yī zī yuán de gōng néng, xū yào yǐn rù suǒ Lock de gài niàn, yě jiù shì shuō, mǒu gè shí kè, dāng yòu yī gè fǎng wèn lèi fǎng wèn zhè gè shù jù duì xiàng shí, zhè gè shù jù duì xiàng bì xū shàng suǒ Locked, yòng wán hòu jiù lì jí jiě suǒ unLocked, zài gōng qí tā fǎng wèn lèi fǎng wèn。
shǐ yòng chuán tǒng de biān chéng xí guàn, wǒ men huì chuàng jiàn yī gè chōu xiàng lèi, suǒ yòu de fǎng wèn lèi jì chéng zhè gè chōu xiàng fù lèi, rú xià:
abstractclassWorker{
abstractvoidlocked();
abstractvoidaccessDataObject();
abstractvoidunlocked();
}
quē diǎn:
accessDataObject() fāng fǎ xū yào yòu“ suǒ” zhuàng tài zhī lèi de xiāng guān dài mǎ。
Java zhǐ tí gōng liǎo dān jì chéng, yīn cǐ jù tǐ fǎng wèn lèi zhǐ néng jì chéng zhè gè fù lèi, rú guǒ jù tǐ fǎng wèn lèi hái yào jì chéng qí tā fù lèi, bǐ rú lìng wài yī gè rú Worker de fù lèi, jiāng wú fǎ fāng biàn shí xiàn。
zhòng yòng bèi dǎ zhé kòu, jù tǐ fǎng wèn lèi yīn wéi yě bāo hán“ suǒ” zhuàng tài zhī lèi de xiāng guān dài mǎ, zhǐ néng bèi zhòng yòng zài xiāng guān yòu“ suǒ” de chǎng hé, zhòng yòng fàn wéi hěn zhǎi。
zǎi xì yán jiū zhè gè yìng yòng de“ suǒ”, tā qí shí yòu xià liè tè xìng:
“ suǒ” gōng néng bù shì jù tǐ fǎng wèn lèi de shǒu yào huò zhù yào gōng néng, fǎng wèn lèi zhù yào gōng néng shì fǎng wèn shù jù duì xiàng, lì rú dú qǔ shù jù huò gēnggǎi dòng zuò。
“ suǒ” xíng wéi qí shí shì hé jù tǐ fǎng wèn lèi de zhù yào gōng néng kě yǐ dú lì、 qū fēn kāi lái de。
“ suǒ” gōng néng qí shí shì zhè gè xì tǒng de yī gè zòng xiàng qiē miàn, shè jí xǔ duō lèi、 xǔ duō lèi de fāng fǎ。 rú xià tú:
yīn cǐ, yī gè xīn de chéng xù jié gòu yīnggāi shì guān zhù xì tǒng de zòng xiàng qiē miàn, lì rú zhè gè yìng yòng de“ suǒ” gōng néng, zhè gè xīn de chéng xù jié gòu jiù shì aspect( fāng miàn)
zài zhè gè yìng yòng zhōng,“ suǒ” fāng miàn( aspect) yīnggāi yòu yǐ xià zhí zé:
tí gōng yī xiē bì bèi de gōng néng, duì bèi fǎng wèn duì xiàng shí xiàn jiā suǒ huò jiě suǒ gōng néng。 yǐ bǎo zhèng suǒ yòu zài xiū gǎi shù jù duì xiàng de cāo zuò zhī qián néng gòu diào yòng lock() jiā suǒ, zài tā shǐ yòng wán chéng hòu, diào yòng unlock() jiě suǒ。
aop yìng yòng fàn wéi
hěn míng xiǎn, aop fēi cháng shì hé kāi fā J2EE róng qì fú wù qì, mù qián JBoss4.0 zhèng shì shǐ yòng aop kuàng jià jìn xíng kāi fā。
jù tǐ gōng néng rú xià:
Authentication quán xiàn
Caching huǎn cún
Contextpassing nèi róng chuán dì
Errorhandling cuò wù chǔlǐ
Lazyloading lǎn jiā zài
Debugging tiáoshì
logging,tracing,profilingandmonitoring jì lù gēn zōng yōu huà jiàozhǔn
Performanceoptimization xìng néng yōu huà
Persistence chí jiǔ huà
Resourcepooling zī yuán chí
Synchronization tóng bù
Transactions shì wù
【 aop yòu bì yào má?】
dāng rán, shàng shù yìng yòng fàn lì zài méi yòu shǐ yòng aop qíng kuàng xià, yě dé dào liǎo jiě jué, lì rú JBoss3.XXX yě tí gōng liǎo shàng shù yìng yòng gōng néng, dàn shì méi yòu shǐ yòng aop。
dàn shì, shǐ yòng aop kě yǐ ràng wǒ men cóng yī gè gèng gāo de chōu xiàng gài niàn lái lǐ jiě ruǎn jiàn xì tǒng, aop yě xǔ tí gōng yī zhǒng yòu jià zhí de gōng jù。 kě yǐ zhè me shuō: yīn wéi shǐ yòng aop jié gòu, xiàn zài JBoss4.0 de yuán mǎ yào bǐ JBoss3.X róng yì lǐ jiě duō liǎo, zhè duì yú yī gè dà xíng fù zá xì tǒng lái shuō shì fēi cháng zhòng yào de。
cóng lìng wài yī gè fāng miàn shuō, hǎo xiàng bù shì suǒ yòu de réndōu xū yào guān xīn aop, tā kě néng shì yī zhǒng jià gòu shè jì de xuǎn zé, rú guǒ xuǎn zé J2EE xì tǒng, aop guān zhù de shàng shù tōng yòng fāng miàn dōuyǐ jīng bèi J2EE róng qì shí xiàn liǎo, J2EE yìng yòng xì tǒng kāi fā zhě kě néng xū yào gèng duō dì guān zhù hángyè yìng yòng fāng miàn aspect。
【 aop jù tǐ shí xiàn】
aop shì yī gè gài niàn, bìng méi yòu shè dìng jù tǐ yǔ yán de shí xiàn, tā néng kè fú nà xiē zhǐ yòu dān jì chéng tè xìng yǔ yán de quē diǎn( rú Java), mù qián aop jù tǐ shí xiàn yòu yǐ xià jǐ gè xiàng mù:
AspectJ(TM): chuàng jiàn yú XeroxPARC. yòu jìn shí nián lì shǐ, chéng shú
quē diǎn: guò yú fù zá; pò huài fēng zhuāng; xū yào zhuān mén de Java biān yì qì。
dòng tài aop: shǐ yòng JDK de dòng tài dài lǐ API huò zì jié mǎ Bytecode chǔlǐ jì shù。
jī yú dòng tài dài lǐ API de jù tǐ xiàng mù yòu:
JBoss4.0JBoss4.0 fú wù qì
nanning zhè shì yǐ zhōng guó nán níng mìng míng de yī gè xiàng mù, gǎo bù qīng chǔ wèishénme hé zhōng guó xiāng guān? shì zhōng guó rén fā qǐ de?
jī yú zì jié mǎ de xiàng mù yòu:
aspectwerkz, spring |
|
shǒu jī | yí dòng zhōng duān | zài xiàn yìng yòng fú wù guǎn lǐ píng tái | |
|