国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

深入理解java的spring-ioc的使用

2024-07-14 08:43:46
字體:
供稿:網(wǎng)友

spring-ioc的使用

IOC容器在很多框架里都在使用,而在spring里它被應(yīng)用的最大廣泛,在框架層面上,很多功能都使用了ioc技術(shù),下面我們看一下ioc的使用方法。

  1. 把服務(wù)注冊到ioc容器
  2. 使用屬性注入反射對應(yīng)類型的實例
  3. 多態(tài)情況下,使用名稱反射類型的實例

把服務(wù)注冊到ioc容器

@Bean注冊組件
使用@Bean注解進(jìn)行類型的注冊,默認(rèn)你的ioc容器里類型為bean的返回值,名稱為bean所有的方法名,與你的包名稱沒有直接關(guān)系,如果你的接口有多種實現(xiàn),在注冊時可以使用@Bean("lind")這種方式來聲明。

@Component,@Configuration,Service,Repository注冊組件

這幾個注解都是在類上面聲明的,而@Bean是聲明在方法上的,這一點要注意,這幾個注解一般是指對一個接口的實現(xiàn),在實現(xiàn)類上加這些注解,例如,一個數(shù)據(jù)倉儲接口UserRepository,它可以有多種數(shù)據(jù)持久化的方式,如SqlUserRepositoryImpl和MongoUserRepositoryImpl,那么在注冊時你需要為他們起一個別名,如@Repository("Sql-UserRepositoryImpl) qlUserRepositoryImpl,默認(rèn)的名稱是類名,但注意類名首字母為小寫

public interface EmailLogService { void send(String email, String message);}@Component()public class EmailLogServiceHttpImpl implements EmailLogService { private static final Logger logger = LoggerFactory.getLogger(EmailLogServiceHttpImpl.class); @Override public void send(String email, String message) { Assert.notNull(email, "email must not be null!"); logger.info("send email:{},message:{}", email, message); }}@Component("email-socket")public class EmailLogServiceSocketImpl implements EmailLogService { private static final Logger logger = LoggerFactory.getLogger(EmailLogServiceSocketImpl.class); @Override public void send(String email, String message) { Assert.notNull(email, "email must not be null!"); logger.info("send email2:{},message:{}", email, message); }}// 看一下調(diào)用時的測試代碼 @Resource(name = "email-socket") EmailLogService socketEmail; @Autowired @Qualifier( "emailLogServiceHttpImpl") EmailLogService httpEmail; @Test public void testIoc2() { socketEmail.send("ok", "ok"); } @Test public void testIoc1() { httpEmail.send("ok", "ok"); }

在程序中使用bean對象

1.使用Resource裝配bean對象
在通過別名調(diào)用bean時,你可以使用@Resource注解來裝配對象

2.使用@Autowired裝配bean對象
也可以使用 @Autowired
@Qualifier( "emailLogServiceHttpImpl")兩個注解去實現(xiàn)程序中的多態(tài)

使用場景

在我們有些相同行為而實現(xiàn)方式不同的場景中,如版本1接口與版本2接口,在get方法實現(xiàn)有所不同,而這
兩個版本都要同時保留,這時我們需要遵守開閉原則,擴展一個新的接口,而在業(yè)務(wù)上對代碼進(jìn)行重構(gòu),
提取兩個版本相同的方法到基類,自己維護(hù)各自獨有的方法,在為它們的bean起個名字,在裝配時,通過
bean的名稱進(jìn)行裝配即可。

寫個偽代碼:

class Api_version1(){@Autowired @Qualifier("print-version1")PrintService printService;}class Api_version2(){@Autowired @Qualifier("print-version2")PrintService printService;}class BasePrintService{}interface PrintService{}@Service("print-version1")class PrintServiceImplVersion1 extends BasePrintService implements PrintService{}@Service("print-version2")class PrintServiceImplVersion2 extends BasePrintService implements PrintService{}

以上所述是小編給大家介紹的java的spring-ioc的使用詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 哈密市| 观塘区| 汝州市| 土默特右旗| 剑川县| 舟山市| 西乌| 玉溪市| 剑阁县| 双流县| 萍乡市| 德令哈市| 大余县| 酒泉市| 新干县| 米泉市| 长沙市| 黎城县| 禹城市| 荥经县| 武山县| 宜都市| 靖州| 朝阳区| 赤峰市| 绥滨县| 忻州市| 铜鼓县| 阿合奇县| 关岭| 江门市| 桦甸市| 白山市| 钟山县| 富阳市| 从江县| 临夏市| 深圳市| 察雅县| 台前县| 景德镇市|