Java程序員常用的@Component、@Repository、@Controller、@Serv

Java程序員常用的@Component、@Repository、@Controller、@Service系列【案例demo3】
Java程序員常用的@Component、@Repository、@Controller、@Serv

很多程序員通過在類上使用@Repository、@Component、@Service 和 @Constroller 註解,Spring會自動創建相應的 BeanDefinition 對象,並註冊到 ApplicationContext 中。這些類就成了 Spring受管組件。這三個註解除了作用於不同軟件層次的類,其使用方式與@Repository 是完全相同的。

處理類:org.springframework.context.annotation.ScannedGenericBeanDefinition

[if !supportLists]· [endif]項目包結構

F:.

├─java

│ └─com

│ └─example

│ └─demo3

│ │ Demo3Application.java

│ │

│ ├─controll

│ │ StuController.java

│ │

│ ├─dao

│ │ StuDao.java

│ │ StuDaoImp.java

│ │

│ ├─entity

│ │ Stu.java

│ │

│ └─server

│ StuService.java

│ StuServiceImp.java

└─resources

    application.properties

    project.text

[if !supportLists]· [endif]控制器角色StuController

package com.example.demo3.controll;

import org.springframework.stereotype.Controller;

@Controller

public class StuController {

}

[if !supportLists]· [endif]數據角色StuDao、StuDaoImp

package com.example.demo3.dao;

public interface StuDao {

}

package com.example.demo3.dao;

import org.springframework.stereotype.Repository;

@Repository

public class StuDaoImp implements StuDao{

}

[if !supportLists]· [endif]服務角色StuService、StuServiceImp

package com.example.demo3.server;

public interface StuService {

}

package com.example.demo3.server;

import org.springframework.stereotype.Service;

@Service

public class StuServiceImp implements StuService {

}

[if !supportLists]· [endif]其它組件角色Stu

package com.example.demo3.entity;

import org.springframework.stereotype.Component;

@Component

public class Stu {

String name;

public Stu(String name) {

    this.name = name;

}

public Stu() {

}

public String getName() {

    return name;

}

public void setName(String name) {

    this.name = name;

}

@Override

public String toString() {

    return "Stu{" +

            "name='" + name + '\'' +

            '}';

}

}

[if !supportLists]· [endif]Demo3Application(啓動程序)

package com.example.demo3;

import com.example.demo3.controll.StuController;

import com.example.demo3.dao.StuDao;

import com.example.demo3.entity.Stu;

import com.example.demo3.server.StuService;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication

public class Demo3Application {

public static void main(String[] args) {

    ConfigurableApplicationContext context = SpringApplication.run(Demo3Application.class, args);

    //@Component註冊的組件,名稱默認都是類名的首字母小寫

    //純屬於註解方式註冊組件

    //之所以能力掃描到這些包,因爲註解@AutoConfigurationPackage的作用(但必須滿足所有組件都在啓動類所在包的平級或子集)

    StuController stuController = context.getBean("stuController", StuController.class);

    Stu stu = context.getBean("stu", Stu.class);

    StuDao stuDaoImp = context.getBean("stuDaoImp", StuDao.class);

    StuService stuServiceImp = context.getBean("stuServiceImp", StuService.class);

    //打印都有地址

    System.out.println(stuController);

    System.out.println(stu);

    System.out.println(stuDaoImp);

    System.out.println(stuServiceImp);

    context.close();

}

}

AnnotationConfigApplicationContext與ConfigurableApplicationContext的關係

總結:

1.上下文基本架構關係

2.ConfigurableApplicationContext:

3.ClassPathXmlApplicationContext:

4.AnnotationConfigApplicationContext:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章