Spring是于2003 年兴起的一个轻量级的Java 开发框架。
Spring之IOC,控制反转,后认为 依赖注入,更为准确。
注入 有 构造器注入 与 set注入。 一般都使用后者。
<bean id="myService" class="com.ServiceImpl">
<property name="dao" ref="myDao"/>
</bean>
<bean id="myDao" class="com.DaoImpl"/>
可以直接使用 注解,来减少xml中的bean
扫描指定包下的类
<context:component-scan base-package="com">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation"
expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
<context:exclude-filter type="assignable" expression="com.123465.eyas.common.conf.SwaggerConfig"/>
</context:component-scan>
注解可以自动完成 set 方法
@Controller 一般用于SpringMVC中的 Controller
@Service 一般用于Service
@mybatisRepository 一般用于Dao进行数据的访问
@Autowired 一般用于成员变量
@Component 是一种通用的组件
注解还可以显示的指定其名称,作用域
@Scope("prototype")
@Service("userService")
public class UserService {
如果没有显示的 指定名称,则 BeanNameGenerator会默认给该类起名,名字以类名为基础并且首字母小写
注解默认的作用域为 singleton (单例)
java 中的反射机制基础,可以帮助我们理解 依赖注入
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class TestReflect {
public static void main(String[] args) {
Class<?> c = null;
// same as new Person().getClass().getName() 获取该类的完全限定名,就是我们在bean中配置的class
String TotalClassName = Person.class.getName();
try {
System.out.println("-----无参构造-----");
c = Class.forName(TotalClassName);
Person person = (Person) c.newInstance();
person.setName("lyle");
person.setAge(23);
System.out.println(person);
System.out.println("-----有参构造-----");
Constructor<?> con = c.getConstructor(String.class, int.class);
Person p = (Person) con.newInstance("lyle", 23);
System.out.println(p);
System.out.println("-----有参的方法调用-----");
Method m = c.getMethod("sayHi", String.class, int.class);
m.invoke(c.newInstance(), "lyle", 23);
} catch (Exception e) {
e.printStackTrace();
}
}
}