我是Spring的新手,无法理解何时使用new运算符实例化类以及何时使用spring容器。 例如,我找到了一个代码
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
EmployeeDao dao=(EmployeeDao)ctx.getBean("edao");
int status=dao.saveEmployee(new Employee(102,"Amit",35000));
System.out.println(status);
int status=dao.updateEmployee(new Employee(102,"Sonoo",15000));
System.out.println(status);
Employee e=new Employee();
e.setId(102);
int status=dao.deleteEmployee(e);
System.out.println(status);
}
}
我正在使用jdbc模板。我怀疑为什么我们有新的instatiate员工类,而不是我们应该使用(员工)ctx.getBean(“员工”)。使用new运算符会创建依赖吗? 请帮忙
答案 0 :(得分:0)
来自ProSpring的书,
“我们使用Spring构建的应用程序中, 一直不由Spring管理的唯一对象是域对象。 (尽管在春天 通过将@Component注释应用于类,可以让Spring管理域对象 并为它们分配原型范围,大多数时候我们会选择管理域对象 在应用程序中。)原因是,实际上,Spring不需要参与 域对象。通常,您使用new()运算符创建域对象的许多实例 并在服务或数据访问层中执行处理。虽然Spring也支持 每次请求域对象的新实例注入时(通过使用bean范围) 通常,开发人员不会采用这种方法,因为通常域对象不会采用 依赖注入的优点,因为它们通常在DOM之外具有很少的依赖性 本身,它们不需要太多配置。“
所以,是的,你可以创建Employee类型的bean,但是它们必须被定义为原型,因为默认情况下,spring中的所有bean都是单例。因为可能有很多员工和他们的对象,你显然不能将Employee作为单身人士。但是你对弹簧特征利用的关注应该远远超过管理领域对象。
答案 1 :(得分:0)
Spring IOC容器是Spring Framework的核心。容器将创建对象,将它们连接在一起,配置它们,并管理从创建到销毁的整个生命周期.IoC容器通过XML或Java注释或Java代码获取信息/元数据。
是的,您可以在Spring上下文xml文件中创建Employee bean,并确保范围是原型
<bean id="employee" class="com.mycompany.Employee" scope="prototype"/>
因此,在Employee bean的每个请求中,您将获得一个新对象Employee。
还有其他bean范围
注意:不建议为数据库模型类创建bean。因为持久层将处理它。