日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

ioc基于注解方式

作者:仰望星空的快樂 更新時間: 2022-05-10 編程語言

類的注解

@Component

@Service? ? ? service層

@Controller? ? ? web層

@Repository? ? ?dao層

上面四個注解是功能一樣的,都可以實現(xiàn)對象的創(chuàng)建,只是習慣把 每個類用在對應的層中,使開發(fā)更加清晰

基于注解方式 實現(xiàn)對象的創(chuàng)建

1.引入spring-aop-5.2.6.RELEASE.jar 包,在之前下載的spring-framework-5.2.6.RELEASE的libs中

2.在xml中開啟組件掃描

注意約束中添加了兩行




    
    

    

3.創(chuàng)建類? 在類聲明前@后面加需要的那四個類中的一個

package com.service;

import org.springframework.stereotype.Service;

@Service(value = "aa")
//如果按上面這么寫,則調用時候應該這樣寫:  
//Userservice userservice=context.getBean("aa",Usersrvice.class);
// 如果沒有寫value,調用的時候默認是類名的第一個字母小寫,應該如下調用:
//Usersrvice usersrvice=context.getBean("userservice",Usersrvice.class);

public class Usersrvice {

    public  void print()
    {
        System.out.println("userservice的輸出");
    }
    public static void main(String[] args) {
        System.out.println(" hello world");
    }
}

調用正常寫即可?


import com.service.Usersrvice;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Testdemo {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("demo1.xml");
        Usersrvice usersrvice= context.getBean("usersrvice",Usersrvice.class);
        System.out.println(usersrvice);
        usersrvice.print();
    }
}

4.開啟組件掃描的細節(jié)?

?選擇掃描哪些

   
    
        
        
        
    

?選擇哪些類不掃描


        
        
        
    

?對象作為另一個類的屬性的注解(對象屬性)

@Autowired//根據(jù)類型進行注入
import com.dao.Userdao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service(value = "aa")//service層的類應該用@Service注解
//如果不寫參數(shù),則  Usersrvice usersrvice=context.getBean("aa",Usersrvice.class);
// 調用的時候默認是類名的第一個字母小寫
//Usersrvice usersrvice=context.getBean("userservice",Usersrvice.class);
public class Userservice {
    @Autowired//根據(jù)類型進行注入
     public Userdao userdao;
    public  void print()
    {
        System.out.println("userservice的輸出");
    }
    public static void main(String[] args) {
        System.out.println(" hello world");
    }
}

userdao類?

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository//dao層類的應該用repository注解
public class Userdao {
    public void print()
    {
        System.out.println("dao的方法執(zhí)行");
    }
}

測試類

import com.service.Userservice;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Testdemo {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("demo1.xml");
        Userservice userservice= context.getBean("aa",Userservice.class);
//        System.out.println(userservice);
        userservice.userdao.print();
    }
}

?輸出

@qualifier? 根據(jù)屬性名稱注入? 當我userdao是個接口,有好多實現(xiàn)類,那么根據(jù)類型注入就不行了,需要@qualifier進行輔助


import com.dao.Userdaoimpl1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

@Service(value = "aa")
//如果不寫參數(shù),則  Usersrvice usersrvice=context.getBean("aa",Usersrvice.class);
// 調用的時候默認是類名的第一個字母小寫
//Usersrvice usersrvice=context.getBean("userservice",Usersrvice.class);
public class Userservice {
    @Autowired//根據(jù)類型進行注入
    @Qualifier("daoimpl1")
     public Userdaoimpl1 userdao;
    public  void print()
    {
        System.out.println("userservice的輸出");
    }
    public static void main(String[] args) {
        System.out.println(" hello world");
    }
}

package com.dao;

import org.springframework.stereotype.Repository;

@Repository(value = "daoimpl1")//不寫默認就是首字母小寫userdaoimpl1
public class Userdaoimpl1 implements Userdao{
    public void print()
    {
        System.out.println("dao的方法執(zhí)行");
    }
}

?@Resource? 根據(jù)類型注入

@Resource(name="daoimpl1")根據(jù)名稱注入
import javax.annotation.Resource;//這個resource不是spring的官方包中的,所以不鼓勵用這個

@Service(value = "aa")
//如果不寫參數(shù),則  Usersrvice usersrvice=context.getBean("aa",Usersrvice.class);
// 調用的時候默認是類名的第一個字母小寫
//Usersrvice usersrvice=context.getBean("userservice",Usersrvice.class);
public class Userservice {
    @Resource(name="daoimpl1")
    public Userdaoimpl1 userdao;
    public  void print()
    {
        System.out.println("userservice的輸出");
    }
    public static void main(String[] args) {
        System.out.println(" hello world");
    }
}
@Value(value = "10")給普通的屬性賦值

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;

@Repository(value = "daoimpl1")//不寫默認就是首字母小寫userdaoimpl1
public class Userdaoimpl1 implements Userdao{
    @Value(value = "10")
    public int aa;
    public void print()
    {
        System.out.println("dao的方法執(zhí)行");
    }
}

?去掉xml配置文件,使用注解 作為配置類(全注解開發(fā))

新建一個類config,用來替代xml文件

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = {"com"})//basepackages是尋找組件的范圍
// 相當于xml文件中的
public class Config {
}

將原來xml的位置換為config類

將對象換為AnnotationConfigApplicationContext

ApplicationContext context=new AnnotationConfigApplicationContext(Config.class);
import com.service.Userservice;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Testdemo {
    public static void main(String[] args) {
        ApplicationContext context=new AnnotationConfigApplicationContext(Config.class);
        Userservice userservice= context.getBean("aa",Userservice.class);
        userservice.userdao.print();
    }
}

原文鏈接:https://blog.csdn.net/sharesb/article/details/123458144

欄目分類
最近更新