2020년 10월 4일 일요일

스프링 XML설정 ref bean, ref local차이, 빈정의시 id와 name의 차이(스프링동영상/자바동영상/자바교육/스프링교육/SpringFramework/스프링프레임워크/스프링학원/자바학원/자바/JAVA)


스프링 XML설정 ref bean, ref local차이, 빈정의시 id와 name의 차이(스프링동영상/자바동영상/자바교육/스프링교육/SpringFramework/스프링프레임워크/스프링학원/자바학원/자바/JAVA)   

 

 

n  bean vs local

 

<bean id="empService" class="xmlinjection.EmpService">

      <constructor-arg ref="empDao"/>

      <constructor-arg><ref bean="empDao"/> </constructor-arg>

      <constructor-arg><ref local="empDao"/> </constructor-arg>

</bean>

 

<ref bean=“onjBean”/>

 

가장 일반적인 형태동일한/상위 BeanFactory or ApplicationContext 내에서 자바 빈을 검색물론 동일한 XML 설정 파일 내부가 아니더라도 관계 없다찾고자 하는 onjBean id, name 어느 것이나 정의되어 있으면 된다.

 

<ref local= “onjBean” />

 

동일한 XML 설정 파일내에서 onjBean을 검색하며 onjBean bean정의의 id로 검색하며, Spring4에서 local을 더 이상 사용하지 않는다스프링이상이라면 <ref bean=“”/>을 사용하자.

 

n  빈 정의시 id  name의 차이

ü  id or name은 하나의 XML 파일에서는 하나만 정의가능(유일). 중복되면 안됨

ü  하나의 XML 파일, bean정의에는 id, name에 중복 이름 사용 가능.

<bean id="designername="emp,designer" class="idnametest.Designer"/>

ü  XML 파일이 다르면 id, name 중복 정의가능뒤에 로딩되는 파일의 빈이 선택된다.

(XML작성시 오류발생 하지 않지만 실행하여 XML 로딩시 중복 선언 오류발생)

<bean id="emp" name = "designer" class="idnametest.Designer"/>

<bean id="emp" class="idnametest.Programmer"/>

 

ü  id는 오로지 하나, name은 여러 개 정의 가능하다.

       <bean id="foo" name = "foo1, foo2" class="ojc.Foo"/>

 

   Foo f1 = (Foo) context.getBean("foo");

   Foo f2 = (Foo) context.getBean("foo1");

   Foo f3 = (Foo) context.getBean("foo2");

 

ü  다른 설정파일에 id, name이 같은 빈을 정의할 수 있다.

[bean1.xml]

<bean id="foo" name = "king, queen" class="ojc.Foo"/>

 

[bean2.xml]

<bean id="bar" name = "king" class="ojc.Bar"/>

 

FileSystemXmlApplicationContext context =

   new FileSystemXmlApplicationContext(new String[] { "beans2.xml", "beans1.xml" });

Foo f = (Foo) context.getBean("king");

 

bean1.xml 파일이 나중에 로딩되므로 bean1.xml king이 로드된다.

 

 

 

 

 

[실습]

 

 

package idnametest;


public abstract class Emp {

public abstract void work();

}



package idnametest;

import javax.annotation.PostConstruct;

public class Designer extends Emp {
@PostConstruct
public void afterNew() {
System.out.println("Designer Created...");
}
public void work() {
System.out.println("Designer working...");
}
}


package idnametest;

import javax.annotation.PostConstruct;

public class Programmer extends Emp{
@PostConstruct
public void afterNew() {
System.out.println("Programmer Created...");
}

public void work() {
System.out.println("Programmer working...");
}
}


package idnametest;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class EmpTest {
public static void main(String[] args) {
// EmpConfig.java 파일 안에 있는 @Bean으로 정의된 빈을 로딩
// 기본적으로 Pre-Loading
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:emp2.xml", "classpath:emp1.xml");        
        System.out.println("ApplicationContext 초기화...");
         
        Emp emp1 = (Emp)ctx.getBean("programmer");
        emp1.work();
        
        Emp emp2 = (Emp)ctx.getBean("designer");
        emp2.work();
        
        Emp emp3 = (Emp)ctx.getBean("emp");
        emp3.work();
}
}



-- emp1.xml

<?xml version="1.0" encoding="UTF-8"?>

    <bean id="programmer" name = "emp,programmer" class="idnametest.Programmer"/>
    
</beans>



-- emp2.xml

<?xml version="1.0" encoding="UTF-8"?>

    <bean id="designer" name = "emp,designer" class="idnametest.Designer"/>
    
</beans>






 

실행

ApplicationContext 초기화...

Programmer working...

Designer working...

Programmer working...

 

 

#refbean, #reflocal, #스프링DI, #스프링IoC, #SpringDI, #SpringIoC, #자바스프링, #Spring동영상, #Spring강의, #스프링프레임워크, #스프링교육, #스프링학원, #스프링강좌, #스프링강의, #자바학원, #자바, #스프링동영상, #자바동영상, #스프링프레임워크교육, #스프링프레임워크강의, #스프링프레임워크학원   

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...