Attribute 创建 作用 如何使用

创建

public class HellowAttribute:Attribute
    {
        public int ID { get; set; }

        public string Name { get; set; }

        public void SayHi()
        {
            Console.WriteLine("Hi");
        }

        public void SayHi(string name)
        {
            Console.WriteLine("Hi {0}",name);
        }
    }

创建的时候需要注意

1、需要继承Attribute 

2、类名要以Attribute结尾


使用的时候如下,要注意,在不设置的情况下,一个特性,只能写一种,当然可以设置成多个Hellow一起写在上面

特性可以写在类上,方法,字段,属性上,都是可以的

//[Hellow]
    //[HellowAttribute]//全名和上面不带Attribute都可以
    //[Hellow()]//调用无参
    //[Hellow("凹凸曼")]//调用带一个参数的构造函数
    //[Hellow(ID=1,Name="张三")]//赋值

    public class DemoClass
    {

    }


特性的作用

特性的作用就是在不影响修饰对象的前提下,额外的给它增加一些备注信息

备注信息的作用是可以通过反射获取


例子:

枚举中使用的Remark如何获取

创建一个RemarkAttribute

public class RemarkAttribute:Attribute
    {
        
        private string _Sname;

        public RemarkAttribute(string sname)
        {
            _Sname = sname;
        }

        public string Sname { get {return _Sname; } }
        
    }

通过一个GetRemak类的Get方法 获取Sname  需要注意 为了方便,做成了扩展方法,并且类和方法都是静态

public static class GetRemak
    {
        public static string Get(this Enum shuiguo)
        {
            //获得类型
            Type type = shuiguo.GetType();
            //获取该类型中的字段
            FieldInfo fiel = type.GetField(shuiguo.ToString());
            //获取字段上面的Attribute
            RemarkAttribute r=(RemarkAttribute)fiel.GetCustomAttribute(typeof(RemarkAttribute));
            return r.Sname;
        }
    }
应用

ShuiGuo.PingGuo.Get()



在HK2中,Attribute是一种用于注入配置值的机制。具体来说,当我们使用HK2创建对象时,可以使用Attribute注解来标识一个属性需要被注入,这个注解通常与String型的值配合使用。 通过使用Attribute注解,我们可以将配置值从代码中分离出来,使代码更加清晰和可维护。另外,Attribute注解还允许我们将配置值从不同的来源中获取,例如配置文件、数据库、环境变量等,这样我们可以更加灵活地管理配置。 下面是一个使用Attribute注解的例子: ```java import javax.inject.Inject; import org.glassfish.hk2.api.Attribute; import org.glassfish.hk2.api.Service; @Service public class MyService { private String configValue; @Inject public MyService(@Attribute("config.value") String configValue) { this.configValue = configValue; } public String getConfigValue() { return configValue; } } ``` 在上面的代码中,我们使用Attribute注解来标识一个名为"config.value"的配置属性。在MyService的构造函数中,我们使用@Inject注解来注入这个属性的值,并将其保存在的一个成员变量中。 接下来,我们需要创建一个HK2的Binder,用于将我们的MyService绑定到HK2的上下文中,并将配置值注入到MyService的构造函数中。例如: ```java import org.glassfish.hk2.api.ServiceLocator; import org.glassfish.hk2.utilities.ServiceLocatorUtilities; public class MyServiceApp { public static void main(String[] args) { ServiceLocator locator = ServiceLocatorUtilities.createAndPopulateServiceLocator(); ServiceLocatorUtilities.bind(locator, new MyServiceBinder()); MyService myService = locator.getService(MyService.class); System.out.println("Config value: " + myService.getConfigValue()); } } import org.glassfish.hk2.api.TypeLiteral; import org.glassfish.hk2.utilities.binding.AbstractBinder; public class MyServiceBinder extends AbstractBinder { @Override protected void configure() { bind("My Config Value").to(String.class).named("config.value"); bind(MyService.class).to(new TypeLiteral<MyService>() {}).in(Singleton.class); } } ``` 在上面的代码中,我们创建了一个MyServiceApp,用于启动我们的应用程序。在main方法中,我们创建了一个ServiceLocator,并使用ServiceLocatorUtilities.bind方法将我们的MyService和一个名为MyServiceBinder的Binder绑定到HK2的上下文中。最后,我们使用locator.getService方法获取MyService实例,并输出它的configValue值。 在MyServiceBinder中,我们使用bind方法将一个名为"config.value"的字符串绑定到String型,并将MyService绑定到一个TypeLiteral<MyService>型中,并将其标记为Singleton。这样,当我们请求MyService实例时,HK2会自动将"config.value"注入到MyService的构造函数中。 注意,在上面的例子中,我们将"config.value"硬编码为一个字符串。在实际应用中,你可能需要从配置文件或其他外部源中获取这个值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值