public class HelloApi { private IMyFirstService myfirstService; public HelloApi() { }; public HelloApi(IMyFirstService myFirstService) { this.myfirstService = myFirstService; } public void setMyfirstService(IMyFirstService myfirstService) { this.myfirstService = myfirstService; } public IMyFirstService getMyfirstService() { return myfirstService; } public String sayHello() { System.out.println(myfirstService.sayHello()); return null; } }
再定义一个接口类:
public interface IMyFirstService { public String sayHello(); }
定义一个该接口的实现类:
public class MyFirstServiceImpl implements IMyFirstService { @Override public String sayHello() { System.out.println("hello"); return "hello"; } }
在spring中,将用两种方法进行注入:1 通过构造函数注入 2 通过setter注入
<!-- 通过构造函数注入 --> <bean id="firstService" class="com.myitem.service.MyFirstServiceImpl"></bean> <bean id="helloApi" class="com.myitem.service.HelloApi"> <constructor-arg index="0" ref="firstService" /> </bean> <!-- 通过setter方式注入 --> <bean id="helloApi2" class="com.myitem.service.HelloApi"> <property name="myfirstService"> <ref bean="firstService" /> </property> </bean>
测试类:
public static void main(String[] args) { BeanFactory beanFactory = new ClassPathXmlApplicationContext("spring/spring-mvc.xml"); HelloApi helloApi = beanFactory.getBean("helloApi", HelloApi.class); helloApi.sayHello(); HelloApi helloApi2 = beanFactory.getBean("helloApi2", HelloApi.class); helloApi2.sayHello(); }
在通过setter注入的时候需要注意<property>标签中的name属性名必须要和对象的setter方法的传入参数字段名一样,要不然spring会找不到该setter方法。注意 JavaBean:是本质就是一个POJO类,但具有一下限制:
该类必须要有公共的无参构造器,如public HelloImpl4() {};
属性为private访问级别,不建议public,如private String message;
属性必要时通过一组setter(修改器)和getter(访问器)方法来访问;
setter方法,以“set” 开头,后跟首字母大写的属性名,如“setMesssage”,简单属性一般只有一个方法参数,方法返回值通常为“void”;
getter方法,一般属性以“get”开头,对于boolean类型一般以“is”开头,后跟首字母大写的属性名,如“getMesssage”,“isOk”;
还有一些其他特殊情况,比如属性有连续两个大写字母开头,如“URL”,则setter/getter方法为:“setURL”和“getURL”,其他一些特殊情况请参看“Java Bean”命名规范。