前些时间一直在做前端,框架方面的知识都有些生疏,所以准备下笔记录一下,方便以后使用
首先就是研究一下Spring注解方面的知识。
我先使用的是非web程序,直接使用IDE(eclipse) 建立一个java project
引入spring 的jar包 以及commons - logging .jar
我用的是spring3.10
spring2.5以上的版本应该都可以使用本程序
spring官方下载地址是
http://repo.springsource.org/libs-release-local/org/springframework/spring/
接着呢创建spring配置文件
文件名为XXX.xml
XXX随意英文即可
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.importnew" />
</beans>
<span style="font-size:24px;"><context:component-scan base-package="com.importnew" />
这句话的意思是自动扫描base-package包下的所有带有注解的bean</span>
接着创建helloworld文件 HelloWorld.java
包为com.importnew
package com.importnew;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public String getMessage(){
return this.message;
}
public void printMessage(){
System.out.println("hello world");
}
}
再创建MainApp.java
package com.importnew;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.printMessage();
}
}
直接运行就可以得到我们要的结果 hello world
@Component
此注解 就代表着 这个类被spring 扫描 并且变为了bean
我们再创建一个类 Car.java
package com.importnew;
import org.springframework.stereotype.Component;
@Component
public class Car {
private int value = 100;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
我们设置一个属性
<pre name="code" class="java">private int value = 100;
我们想得到这个值 但不想 通过new的方式 同样不希望用 get set 的方式 应该怎么样做呢
只需要在HelloWorld.java 中加入一行代码
@Autowired private Car car;
再加入一行输出语句
System.out.println("Your Message : " + car.getValue());
输出就变为了
Your Message :100
通过
<span style="font-size:24px;">@Autowired</span>
我们就将 car 装备到了属性中
那么如果给的类型是父类,注解装备的是子类,可以成功么?
是可以的。
如果子类父类都进行了装配,注入的是子类还是父类?
是父类
如果给的是接口,装配的是实现类,可以成功么?
也是可以的。
但是如果有两个类实现了接口那么会注入哪一个实现类?
当然会报错啦、