由于抽象类不能实例化,所以在spring中就不能在xml配置文件中把值注入到抽象类中,比如我有个抽象类AbstractHtmlParser,而这个抽象类又有多个具体实现类BaiduHtmlParser、GoogleHtmlParser,这些具体实现类又都需要注入一些相同的实例,如果每个实现类都要去声明和注入一些相同的属性则显得太麻烦。这个时候我们可以使用spring的注解方式,在抽象类中把属性声明为protected并使用注解方式定义bean:
package com.haochen.parser;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.haochen.dao.IHibernateDao;
public abstract class AbstractHtmlParser {
@Autowired
protected IHibernateDao hibernateDao;
public void setHibernateDao(IHibernateDao hibernateDao) {
this.hibernateDao = hibernateDao;
}
public abstract List<String> parse();
}
这样,就可以直接在实现类使用hibernateDao属性了:
package com.haochen.parser;
import java.util.List;
import org.springframework.stereotype.Service;
@Service("googleHtmlParser")
public class GoogleHtmlParser extends AbstractHtmlParser {
@Override
public List<String> parse() {
hibernateDao.save(new Object());
return null;
}
}
HibernateDao.java
package com.haochen.dao;
import org.springframework.stereotype.Repository;
@Repository("hibernateDao")
public class HibernateDaoImpl implements IHibernateDao {
@Override
public void save(Object obj) {
}
}
这儿只是为了演示,没有写具体实现过程。
分享到:
相关推荐
3. **特性**:抽象类可以拥有构造函数、字段、属性、方法等,包括非抽象成员的实现。 4. **限制**:一个类只能直接继承一个抽象类,这体现了单一继承的原则。 **接口(Interface)**: 1. **定义**:接口是一组无...
抽象类的主要目的是为其他类提供一个共同的基类,使得子类可以继承其属性和行为。通过继承抽象类,子类可以重写抽象方法,实现不同的功能。Java中的`abstract`关键字用来声明一个类为抽象类,`abstract method`用来...
1. 抽象父类中的属性保护级别必须是protected,这样子类才能访问和使用该属性。 2. 使用@Lazy注解可以延迟加载依赖项,从而避免不必要的资源浪费。 3. 在子类中可以直接使用父类的属性,无需再次注入依赖项。 使用@...
例如,我们可以定义一个名为`BasePageService`的抽象类,其中包含`queryByPage()`方法,用于根据条件和分页参数执行SQL查询,并返回分页结果。业务服务层的其他类可以继承这个基类,重写必要的部分以满足特定需求。 ...
在Java Spring框架中,多个Service实现同一个接口或抽象类是一种常见的设计模式,它允许我们根据不同的业务需求选择合适的实现。这种模式通常被称为多态服务或者策略模式。在给定的文件中,我们看到一个名为`...
* AbstractTestAop:顶层抽象类,定义骨架和执行顺序,内部通过 Autowired 注入了TopClassBean 的实例对象。 * AbstractTestCglibAop:二级抽象类,继承自 AbstractTestAop,空类无实现。 * TestCglibAopExample:...
在这个 `IOCContainer` 类中,`register` 方法用于注册接口及其对应的实现类,而 `resolve` 方法则根据接口获取实例。如果实现类是字符串,那么 `resolve` 将使用 PHP 的 `new` 关键字来实例化对象;如果已注册为一...
抽象类是一种特殊的类,它包含了抽象方法(没有具体实现的方法)和非抽象方法(有具体实现的方法)。在PHP中,如果一个类包含了一个或多个抽象方法,那么这个类就必须被声明为抽象类,使用`abstract`关键字修饰。...
2. 创建具体的实现类,实现接口或继承抽象类。 3. 使用构造函数注入、属性注入或者方法注入等方式将依赖对象传入到使用它们的类中。 依赖注入的种类主要有以下三种: - 构造函数注入:依赖通过构造函数传递到类中...
5. **使用抽象类**:抽象类通常用于定义一个类族的公共行为和属性,当一个类无法被实例化,因为它还缺少一些必要的实现(即包含抽象方法)时,就需要定义为抽象类。 6. **继承抽象类与实现接口**:继承抽象类的子类...
`Mono.Cecil`是一个强大的.NET元数据操作库,它允许开发者在运行时动态地读取、修改并保存IL(中间语言)代码,从而实现静态注入,即在编译后的.NET程序集上进行代码修改。通过这种方式,我们可以实现在不修改源代码...
ASP.NET 面试题库 本资源汇总了企业面试题库中...在 C# 中,接口可以继承其他接口,抽象类可以实现接口和继承其他抽象类或实体类。 13. 赋值操作 在 C# 中,可以使用临时变量来实现赋值操作,例如将 a 的值赋给 b。
- **实现**:服务的具体实现,即实现了接口或继承了抽象类的类。 - **注册**:将服务和其实现绑定到Autofac容器的过程。 - **解析**:在需要使用服务的地方,通过Autofac容器获取其实现实例。 2. **安装与配置**...
* 接口和抽象类都用于实现抽象,但有以下区别: + 接口只能包含常量和抽象方法,而抽象类可以包含成员变量和普通方法。 + 类可以实现多个接口,但只能继承一个抽象类。 + 实现接口时使用 implements 关键字,继承...
在Python中,可以通过参数、属性或构造函数来实现依赖注入。 三、Python实现工厂注入 1. 构造函数注入: 在类的构造函数中接受一个工厂对象,然后使用该工厂来创建依赖的对象。例如: ```python class MyClass: ...
023.NET5_Autofac生命周期.mp4 024.NET5_Autofac配置文件.mp4 ...031.NET5_Autofac多实现属性注入.mp4 032.NET5_ActionFilter的特点.mp4 033.NET5_ActionFilter的多种扩展.mp4 034.NET5_ActionFilter做日志.mp4
抽象类是否可以实现接口?抽象类是否可以继承实体类? * 接口可以继承接口 * 抽象类可以实现接口 * 抽象类可以继承实体类 13. a=10,b=15,在不用第三方变量的情况下,把 a,b 交换值? 可以使用 XOR 运算符来实现...
* 抽象类中可以包含抽象成员(方法、变量、属性等)。 * 抽象方法:用 abstract 修饰并且没有实现的方法,只有方法声明,没有实现。 多态: * 多种形态,对象的多种形态,行为的多种形态体现为,子类对象可以通过...
这里的“抽象”通常指的是接口或抽象类,而“细节”则指具体的实现类。 2. **优点**: - **降低耦合**:依赖倒转使得模块之间的关系更加松散,降低了模块间的直接依赖,从而提高了系统的可重用性和可维护性。 - *...
例如,Spring框架中的`ApplicationContext`接口和`AbstractApplicationContext`抽象类,提供了应用程序上下文的抽象,使得开发者可以方便地管理bean的生命周期和依赖注入。又如,Hibernate框架中的`Session`接口和`...