一些成立很久的公司还在使用
package com.imooc.test.base;
import org.junit.After;
import org.junit.Before;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UnitTestBase {
String springXmlPath;
ClassPathXmlApplicationContext context;
public UnitTestBase() {}
public UnitTestBase(String springXmlPath){
this.springXmlPath = springXmlPath;
}
@Before
public void before(){
if("" == springXmlPath){
springXmlPath = "classpath*:spring-*.xml";
}
try{
context = new ClassPathXmlApplicationContext(springXmlPath.split("[,\\s]+"));
context.start();
}catch(Exception e){
e.printStackTrace();
}
}
@After
public void after(){
context.destroy();
}
public <T extends Object > T getBean(String beanId){
try{
return (T) context.getBean(beanId);
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}
可以的
创建maven项目,导入jar包就可以了
首先看版本就知道spring 5中,为什么要包含spring4的包呢, 另外说一句, 现在找包真的是挺麻烦的,建议学一下maven项目搭建, 不用费时间找包了, 而且还有其他功能, 入门也很简单
直接打印两个对象的地址值,看看相不相同。每次getBean都相当于new一次
BeanScope类上是不是应该加个@Service注解
在这个例子中 可以这样理解
右键点击类名,找到Copy Qualified Name,然后粘贴就好了,但是要把斜杠改掉。
墙裂推荐maven,如果只是简单的spring只用在pom.xml中添加一个context的依赖,其他的core、beans等的依赖也就是jar包全部安装好,你都不用去找各个下载地址按个下载以及考虑放在项目的哪些位置,还有不用考虑版本兼容问题,maven谁用谁知道!
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
maven了解一下
引入到你的eclipse中就行了,注意看看是不是缺少包? Spring所有章节源码 下载下来导入eclipse就可以直接运行。
singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例
prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例
request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效
session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效
globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效
//定义javaBean
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("prototype")
public class Person {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//测试类
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
ApplicationContext appContext = new ClassPathXmlApplicationContext("/spring.xml");
Person p1 = appContext.getBean(Person.class);
System.out.println("p1's identityHashCode is " + System.identityHashCode(p1));
Person p2 = appContext.getBean(Person.class);
System.out.println("p2's identityHashCode is " + System.identityHashCode(p2));
}
}
@Scope("")类型不同,作用域范围不同
我觉得完全不必理会这些人,这种人就是那种觉得全世界都欠他的。。。
可以同时存在,只是你用了构造注入之后,有了有参构造函数,就不会再有默认的无参构造函数了,所以出错,只要手动加个无参构造方法,就可以同时存在了
没有找到历史文件在这路径下/Users/qianzheng/Downloads/fd1/慕课网/Spring
bean在注入的时候scope默认是单例的,多次注入使用的都是同一个对象,使用prototype 在多次注入的时候相当于每次都会new出一个来
别管什么345 ,公司用的一般不是新的,4就极限了.
在执行单元测试方法之前,总是要先执行before方法,之后执行after方法。为了避免每写一个测试方法就得重复写before和after,就把这些函数写到一个基类里,需要的时候直接继承就可以拥有这些方法,包括基类里的getBean方法以及获取xml文件路径这些公共功能,都是这么个道理,希望我说的你能明白
检查spring-injection.xml里的注入方式只使用了其中一种,另外一种必须注释掉。例如,我只启用了设置注入方式:
<bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl">
<property name="injectionDAO" ref="injectionDAO"></property>
</bean>
<!-- <bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl"> -->
<!-- <constructor-arg name="injectionDAO_1" ref="injectionDAO"></constructor-arg> -->
<!-- </bean> -->
2. 还有几项要检查的,你直接看我下面代码中的注释吧
//使用设值注入时,配置文件中的property的name必须和属性名injectionDAO一致
private InjectionDAO injectionDAO;
//构造器注入,构造器参数名injectionDAO_1必须要和配置文件中的constructor-arg的name一致
// public InjectionServiceImpl(InjectionDAO injectionDAO_1) {
// this.injectionDAO = injectionDAO_1;
// }
//设值注入,使用该方法时,不能同时存在构造器注入方法,即上面的构造方法必须注释掉
public void setInjectionDAO(InjectionDAO injectionDAO) {
this.injectionDAO = injectionDAO;
}
谢谢~~~~
是可以的,但是会先执行构造注入,再执行设值注入. 但是他们并不影响. 因为Spring只会生成一次对象,附两次值而已.
他们的HashCode是一样的.如图...
自己创建啊
<id="">
<name>
<class>
视频中不是说的明白了吗。除了class是必要的其他的不必要,他不是列举了一堆xml的Bean项吗
缺少了一个jar包,去下载一个logging这个jar包,加入项目就好了
我使用的是Intellij IDEA,运行测试类也出现错误,这个是为什么?
singleton