Java Spring Boot VS .NetCore (三)Ioc容器處理

 

Java Spring Boot VS .NetCore (一)來一個簡單的 Hello Worldhtml

Java Spring Boot VS .NetCore (二)實現一個過濾器Filterspring

Java Spring Boot VS .NetCore (三)Ioc容器處理數據庫

Java Spring Boot VS .NetCore (四)數據庫操做 Spring Data JPA vs EFCoreapp

Java Spring Boot VS .NetCore (五)MyBatis vs EFCoreide

Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml函數

Java Spring Boot VS .NetCore (七) 配置文件spa

Java Spring Boot VS .NetCore (八) Java 註解 vs .NetCore Attributeprototype

Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Securitycode

Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptorserver

Java Spring Boot VS .NetCore (十一)自定義標籤 Java Tag Freemarker VS .NetCore Tag TagHelper

Java中Spring Ioc 的處理仍是經過配置文件的方式來實現,容器的初始須要說到上下文對象

ApplicationContext這個類,經過ClassPathXmlApplicationContext 加載 Ioc容器Xml配置並經過該實例對象的GetBean來獲取對象實例

下面我就這一塊對比 Java 與 .NetCore的使用方式

容器處理

Java:

首先須要創建Spring Ioc的xml配置文件,配置Bean, 也能夠經過 @Component 註解的方式實現

<?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.xsd">
       <bean id="testUserServices" class="com.example.demo.Services.interfaces.Impl.UserServices" >
       </bean>

</beans>

結合以前的helloword例子,咱們修改下代碼 getBean經過Id獲得,略掉了類相關代碼

@RequestMapping("/helloworld")
    public String Index()
    {

        ApplicationContext ctx=new ClassPathXmlApplicationContext("spring-ioc.xml");
        IUserServices servers= (IUserServices) ctx.getBean("testUserServices");
        return  servers.SayHello("張三");
    }

.NetCore:

core中添加了services.AddScoped<IUserServices, UserServices>(); 添加了相關類的註冊,而Java中則是經過XML配置

 [Route("~/helloworld")]
        public IActionResult Index()
        {
            var servers=(IUserServices) HttpContext.RequestServices.GetService(typeof(IUserServices));
            var model=  servers.FindByName("admin").Result;
            return View();
        }

這裏能夠看到 .NetCore 中的 GetServices 與 Java中的 getBean 其實也就是那麼一回事

註冊的種類 

Java:Java能夠經過構造函數、屬性注入的方式來註冊

.NetCore:同理使用Autofac 也可實現上述,可是.NetCore 中的 Dependence Injection (DI) 通常爲構造函數註冊 ,可是屬性注入須要特殊處理

 

 

Java的xml配置 :

在Bean中添加

屬性注入:

 <property name="testUserServices"  value="com.example.demo.Services.interfaces.Impl.UserServices"></property>

構造函數注入:

  <constructor-arg name="testUserServices" value="com.example.demo.Services.interfaces.Impl.UserServices"></constructor-arg>

.NetCore中對注入這塊我的以爲很方便的

屬性注入

services.AddScoped<IDbProviderFactory>(p=> {
return new CreateDbProviderFactory() { Abc = new ABC(); } 
});

 

構造函數注入

 

在Startup中添加  services.AddScoped<IUserServices, UserServices>(); 

 

生命週期管理

Java 配置 Scope

scope="singleton"
scope="prototype"
scope="request"

singleton:單例模式,容器中只會存在一個實例

prototype:每次請求的每次訪問生成一個實例

request:每一次請求生成一個實例

.NetCore中

services.AddSingleton
services.AddScoped
services.AddTransient

Singleton :單例模式

Scoped:每次請求的每次反問生成一個實例

 Transient:每次請求生成一個實例

 

先介紹到這裏下面看下Java 這邊的效果

相關文章
相關標籤/搜索