• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

빈 등록

24.03.13 00:37 작성 조회수 136

1

Component 에 이름없이 써보고 싶은데

package hello.thymeleaf.basic;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import lombok.Data;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/basic")
public class BasicController {

    @GetMapping("text-basic")
    public String textBasic(Model model) {
        model.addAttribute("data", "Hello Spring!");
        return "basic/text-basic";
    }

    @GetMapping("text-unescaped")
    public String textUnescape(Model model) {
        model.addAttribute("data", "Hello <b>Spring!</b>");
        return "basic/text-unescaped";
    }

    @GetMapping("/variable")
    public String variable(Model model) {
        User userA = new User("userA", 10);
        User userB = new User("userB", 20);

        List<User> list = new ArrayList<>();
        list.add(userA);
        list.add(userB);

        Map<String, User> map = new HashMap<>();
        map.put("userA", userA);
        map.put("userB", userB);

        model.addAttribute("user", userA);
        model.addAttribute("users", list);
        model.addAttribute("userMap", map);

        return "basic/variable";
    }

    @GetMapping("/basic-objects")
    public String basicObjects(Model model, HttpServletRequest request,
                               HttpServletResponse response, HttpSession session) {
        session.setAttribute("sessionData", "Hello Session");
        model.addAttribute("request", request);
        model.addAttribute("response", response);
        model.addAttribute("servletContext", request.getServletContext());
        return "basic/basic-objects";
    }

    /*
    Component helloBean을 지정한 이유 : 지정하지 않으면 HelloBean 의 빈 이름은 BasicController.HelloBean 으로 설정되기 때문
    helloBean을 지정하기 싫으면 내부 클래스 말고 외부에 클래스를 만들어서 사용하면 된다.
    */


    @Data
    static class User {
        private String username;
        private int age;

        public User(String username, int age) {
            this.username = username;
            this.age = age;
        }
    }
}
@Component
public class HelloBean {
    public String hello(String data) {
        return "Hello " + data;
    }
}

 

어떻게 수정하면 될까요?

 

답변 1

답변을 작성해보세요.

0

codesweaver님의 프로필

codesweaver

2024.03.14

안녕하세요. gmldnjs0402님

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

질문 내용을 조금 더 풀어서 설명해주시겠어요?


@Controller 어노테이션을 사용하지 않고 @Component 어노테이션을 사용하여 컨트롤러 처럼 처리하고 싶다는 질문이 맞는지요?

감사합니다.

Controller 안에서 Component를 선언하셨는데 Component를 선언할 때 helloBean을 설정하셨는데 이 helloBean을 안써주고 따로 Component를 빼서 Controller 안에서와 동일하게 동작시켜주고 싶은 코드를 알고 싶습니다.

@Component("helloBean") static class HelloBean { public String hello(String data) { return "Hello " + data; } }

안녕하세요. gmldnjs0402님

외부 클래스로 빼는 것이 아니면 빈의 이름을 적어주셔야 합니다.

감사합니다.

그렇다면 제가 작성한 코드 처럼 사용해도 될까요?

 

저렇게 했을 경우 오류가 나타났던거같아서요

안녕하세요. gmldnjs0402님

구체적으로 어떤 오류가 발생했을까요?

실제 동작하는 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명

 

링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.