针对c#–Tridion2009–使用Interops–是否有可能为同一个Name添加多个setConditions这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展006-SpringBoot
针对c# – Tridion 2009 – 使用Interops – 是否有可能为同一个Name添加多个setConditions这个问题,本篇文章进行了详细的解答,同时本文还将给你拓展006-Spring Boot自动配置-Condition、Conditional、Spring提供的Conditional自动配置、@ConditionalOnProperty 来控制 Configuration 是否生效、@ConditionalOnProperty来控制Configuration是否生效、android – Edittext imeOptions actionDone不使用digits属性?等相关知识,希望可以帮助到你。
本文目录一览:- c# – Tridion 2009 – 使用Interops – 是否有可能为同一个Name添加多个setConditions
- 006-Spring Boot自动配置-Condition、Conditional、Spring提供的Conditional自动配置
- @ConditionalOnProperty 来控制 Configuration 是否生效
- @ConditionalOnProperty来控制Configuration是否生效
- android – Edittext imeOptions actionDone不使用digits属性?
c# – Tridion 2009 – 使用Interops – 是否有可能为同一个Name添加多个setConditions
我想为PublicationTarget的相同Name添加多个setConditions.这是使用interops dll.
ListRowFilter rowFilter = mTDSE.CreateListRowFilter(); rowFilter.SetCondition("StartDate",sDate); rowFilter.SetCondition("EndDate",eDate); rowFilter.SetCondition("PublicationTarget",pubStgTarget);
对于这个PublicationTarget,我想要使用staging&活的目标,我尝试了所有的方式,但没有用.
rowFilter.SetCondition("PublicationTarget",pubStgTarget);
请建议,
1.通过xis可能,最好的方法是什么?
我尝试过这种方式,但没有运气; –
rowFilter.SetCondition("PublicationTarget","tcm:0-1-65537"); // Gives only staging rowFilter.SetCondition("PublicationTarget","tcm:0-2-65537"); // Gives only Live rowFilter.SetCondition("PublicationTarget","tcm:0-1-65537|tcm:0-1-65537"); // No result rowFilter.SetCondition("PublicationTarget",oPubList); // No result - `oPubList` is a
列表与LT;串GT;
解决方法
但是有2种解决方法:
>创建两个RowFilter并在每个RowFilters中设置不同的PublicationTarget条件.然后,您将发出两次查询(每个过滤器一次).这意味着您需要处理2个XML结果节点.
>执行GetListPublishTransactions()时不要使用PublicationTarget条件.然后,您将获得一个包含所有PublicationTargets记录的XML元素.在您的代码中,您只会过滤您感兴趣的内容(例如,分段或直播).
我可能会使用#2(除非我知道Publish Queue可能会返回大量的记录,在这种情况下,我会使用#1).
#2的示例代码:
tdse = new TDS.TDSEClass(); tdse.Impersonate(user.Title); tdse.Initialize(); mgtInfo = tdse.GetManagementInfo(); filter = tdse.CreateListRowFilter(); filter.SetCondition("InfoType",2); // InProgress filter.SetCondition("Publication","tcm:0-23-1"); XmlDocument dom = new XmlDocument(); dom.LoadXml(mgtInfo.GetListPublishTransactions(filter)); XmlNamespaceManager namespaceManager = new XmlNamespaceManager(new NaMetable()); namespaceManager.AddNamespace("tcm","http://www.tridion.com/ContentManager/5.0"); String xPath = String.Format( "tcm:ListPublishTransactions/tcm:Item[@PublicationTarget='{0}'] | " + "tcm:ListPublishTransactions/tcm:Item[@PublicationTarget='{1}']",stagingTcmUri,liveTcmUri); XmlNodeList nodeList = dom.SelectNodes(xPath,namespaceManager); foreach (XmlNode node in dom.DocumentElement.ChildNodes) { //do your thing }
注意:仔细检查XPath表达式,我实际上没有测试过那个位.
006-Spring Boot自动配置-Condition、Conditional、Spring提供的Conditional自动配置
一、接口Condition、Conditional(原理)
主要提供一下方法
boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);
true:表示装配
false:表示不装配
1.1、Conditional
在Spring4中引入,其主要作用就是判断条件是否满足,从而决定是否初始化并向容器注册Bean
注解:Conditional() 参数是数组,数组内的都是true才装配


@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Conditional {
/**
* All {@link Condition}s that must {@linkplain Condition#matches match}
* in order for the component to be registered.
*/
Class<? extends Condition>[] value();
}
通常配合使用。
示例:
接口:EncodingConvert


package com.lhx.spring.springboot_auto_config;
public interface EncodingConvert {
}
接口实现一:UTF8EncodingConvert


package com.lhx.spring.springboot_auto_config;
public class UTF8EncodingConvert implements EncodingConvert {
}
接口实现二:GBKEncodingConvert


package com.lhx.spring.springboot_auto_config;
public class GBKEncodingConvert implements EncodingConvert {
}
配置类:


package com.lhx.spring.springboot_auto_config;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
@SpringBootConfiguration
public class EncodingConvertConfiguration {
@Bean
public EncodingConvert createGBKEncodingConvert() {
return new GBKEncodingConvert();
}
@Bean
public EncodingConvert createUTF8EncodingConvert() {
return new UTF8EncodingConvert();
}
}
App:


package com.lhx.spring.springboot_auto_config;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.Conditional;
@SpringBootApplication
public class App {
@Bean
public Runnable createRunnable() {
return () -> {
System.out.println("spring boot is running");
};
}
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
context.getBean(Runnable.class).run();
//可以通过启动参数修改-Dfile.encoding=GBK
System.out.println(System.getProperty("file.encoding"));
System.out.println(context.getBeansOfType(EncodingConvert.class));
context.close();
}
}
此时,会发现连个接口实现都会被装配进来。
UTF8Condition实现Condition接口


package com.lhx.spring.springboot_auto_config;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class UTF8Condition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String encoding = System.getProperty("file.encoding");
if (encoding != null) {
return "utf-8".equalsIgnoreCase(encoding);
}
return false;
}
}
GBKCondition实现Condition接口


package com.lhx.spring.springboot_auto_config;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class GBKCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String encoding = System.getProperty("file.encoding");
if (encoding != null) {
return "gbk".equalsIgnoreCase(encoding);
}
return false;
}
}
修改配置类


package com.lhx.spring.springboot_auto_config;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
@SpringBootConfiguration
public class EncodingConvertConfiguration {
@Bean
@Conditional(GBKCondition.class)
public EncodingConvert createGBKEncodingConvert() {
return new GBKEncodingConvert();
}
@Bean
@Conditional(UTF8Condition.class)
public EncodingConvert createUTF8EncodingConvert() {
return new UTF8EncodingConvert();
}
}
此时,会发现会根据file.encoding值来装配接口类。
可在启动参数增加
-Dfile.encoding=GBK
然后调试,发现装配类也变了
注意:@Conditional也可以作用在类上
二、Spring提供的Conditional自动配置
jar:spring-boot-autoconfigure中,org.springframework.boot.autoconfigure.condition;即spring-boot提供
ConditionalOnBean:当存在某个bean时候装配
ConditionalOnMissingBean:当不存在某个bean时候装配注解的bean
ConditionalOnClass:当classpath有才装配
ConditionalOnExpression:
ConditionalOnJava:JDK版本符合时候才装配
ConditionalOnNotWebApplication:不是web环境才装配
ConditionalOnWebApplication:是web环境才装配
ConditionalOnResource:资源存在才装配
ConditionalOnProperty:配置存在才装配
2.1、ConditionalOnProperty 配置存在匹配时候才配置
增加配置类


package com.lhx.spring.springboot_auto_config;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
@SpringBootConfiguration
public class UserConfiguration {
@Bean
@ConditionalOnProperty(name = "runnable.enable", havingValue = "true")
public Runnable createRunnable() {
return () -> {
};
}
}
App2编写


package com.lhx.spring.springboot_auto_config;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.Conditional;
@SpringBootApplication
public class App2 {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(App2.class, args);
System.out.println(context.getBeansOfType(Runnable.class));
context.close();
}
}
默认是不能装配的
可以再application.properties中添加runnable.enable=true即可装配
或者@ConditionalOnProperty(name = "runnable.enable", havingValue = "true")增加
matchIfMissing=true,表示配置没有的时候也生效
2.2、ConditionalOnClass classpath 有某个类才装配
增加或删除maven,查看效果
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
使用代码
@Bean
@ConditionalOnClass(name="com.google.gson.Gson")
public Runnable createGsonRunnable() {
return () -> {
};
}
2.3、ConditionalOnBean:根据容器中是否存在某个Bean进行装配
@Bean
@ConditionalOnBean(name="user")
public Runnable createOnBeanRunnable() {
return () -> {
};
}
示例一、根据配置选择不同的实现类注入
需求:根据配置选择不同的实现类注入,有个业务逻辑,有两套模式,大部分功能流程一致,但涉及某些实现不一致,标准的模板模式:004-行为型-02-模板方法模式(Template Method)
实际使用中会有,默认是一种实现,如果有某个配置,则生效。可以参看springboot自动装配实现,如Cache等
实现:https://github.com/bjlhx15/common.git spring-framework-core/spring-aop/testconditional
基础业务接口
public interface ITestConditionalService {
String getBefore();
String get();
}
如果新增业务需要新增配置
public class ConstBean {
public final static String atest="atest";
public final static String btest="btest";
}
抽象类实现公共方案步骤
public abstract class AbstractTestConditionalService implements ITestConditionalService {
@Override
public abstract String getBefore();
@Override
public String get() {
String before = this.getBefore();
// do something
return "before:" + before;
}
}
第一种实现方案:也就是默认方案
@Service("aTestConditionalServiceImpl")
@ConditionalOnProperty(name = "set.test",havingValue = ConstBean.atest,matchIfMissing = true)
public class ATestConditionalServiceImpl extends AbstractTestConditionalService {
@Override
public String getBefore() {
return "atest test";
}
}
第二种方案
@Service("bTestConditionalServiceImpl")
@ConditionalOnProperty(name = "set.test",havingValue = ConstBean.btest)
public class BTestConditionalServiceImpl extends AbstractTestConditionalService {
@Override
public String getBefore() {
return "btest test";
}
}
配置 如果是a逻辑可默认不写
# 配置实现 atest、btest
set.test=atest
@ConditionalOnProperty 来控制 Configuration 是否生效
1. 简介
Spring Boot 通过 @ConditionalOnProperty 来控制 Configuration 是否生效
2. 说明
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
String[] value() default {}; //数组,获取对应property名称的值,与name不可同时使用
String prefix() default "";//property名称的前缀,可有可无
String[] name() default {};//数组,property完整名称或部分名称(可与prefix组合使用,组成完整的property名称),与value不可同时使用
String havingValue() default "";//可与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置
boolean matchIfMissing() default false;//缺少该property时是否可以加载。如果为true,没有该property也会正常加载;反之报错
boolean relaxedNames() default true;//是否可以松散匹配
}
3. 使用方法
通过其两个属性 name 以及 havingValue 来实现的,其中 name 用来从 application.properties 中读取某个属性值。
如果该值为空,则返回 false;
如果值不为空,则将该值与 havingValue 指定的值进行比较,如果一样则返回 true; 否则返回 false。
如果返回值为 false,则该 configuration 不生效;为 true 则生效。
4. 使用示例
我们来模拟通过 application.yml 配置文件来配置我们的服务是使用 Nosql 型的数据库还是 sql 数据库
application.yml 的配置如下:
database:
type: "${DATABASE_TYPE:cassandra}" # cassandra OR sql
这里我们分别定义 Nosql 的注解与 sql 的注解
@ConditionalOnProperty(prefix = "database", value = "type", havingValue = "cassandra")
public @interface NoSqlDao {
}
@ConditionalOnProperty(prefix = "database", value = "type", havingValue = "sql")
public @interface SqlDao {
}
然后简单的写一下 dao 的实现:
public interface DeviceDao {
List<Device> findDevicesByCustomerId(UUID customerId);
}
@Component
@SqlDao
public class JpaDeviceDao implements DeviceDao {
@Override
public List<Device> findDevicesByCustomerId(UUID customerId) {
return null;
}
}
@Component
@NoSqlDao
public class CassandraDeviceDao implements DeviceDao {
@Override
public List<Device> findDevicesByCustomerId(UUID customerId) {
return null;
}
}
那么当我们想使用 cassandra 数据库的时候,只需要更改 yml 配置文件为 cassandra。
而在 DeviceServiceImpl 中,代码则不需要进行更改,因为此时 @ConditionalOnProperty 注解让我们的 JpaDeviceDao 的注入失效了,所以会自动匹配 CassandraDao
@Autowired
private DeviceDao deviceDao;
参考链接:https://www.jianshu.com/p/7bfe623cabcf
@ConditionalOnProperty来控制Configuration是否生效
1. 简介
Spring Boot通过**@ConditionalOnProperty来控制Configuration**是否生效
2. 说明
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
String[] value() default {}; //数组,获取对应property名称的值,与name不可同时使用
String prefix() default "";//property名称的前缀,可有可无
String[] name() default {};//数组,property完整名称或部分名称(可与prefix组合使用,组成完整的property名称),与value不可同时使用
String havingValue() default "";//可与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置
boolean matchIfMissing() default false;//缺少该property时是否可以加载。如果为true,没有该property也会正常加载;反之报错
boolean relaxedNames() default true;//是否可以松散匹配,至今不知道怎么使用的
}
}
3. 使用方法
通过其两个属性name以及havingValue来实现的,其中name用来从application.properties中读取某个属性值。
如果该值为空,则返回false;
如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。
如果返回值为false,则该configuration不生效;为true则生效。
4. code
@Configuration
//在application.properties配置"mf.assert",对应的值为true
@ConditionalOnProperty(prefix="mf",name = "assert", havingValue = "true")
public class AssertConfig {
@Autowired
private HelloServiceProperties helloServiceProperties;
@Bean
public HelloService helloService(){
HelloService helloService = new HelloService();
helloService.setMsg(helloServiceProperties.getMsg());
return helloService;
}
}
5. 收获
springboot注解丰富,我们可以利用好这些注解来实现我们自定义的starter配置,减少硬编码的校验,降低组件间的耦合性!!!
android – Edittext imeOptions actionDone不使用digits属性?
<android.support.v7.widget.AppCompatEditText android:id="@+id/edit_text_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:digits="1234567890abcdefghijklmnopqrstuvwxyz....." android:hint="@string/item_name" android:imeOptions="actionDone" android:maxLines="1" />
使用数字&& ;;时找不到actionDone(Softkeyword中的Done按钮) imeOptions属性在一起.我们只能找到不会改变焦点的输入按钮.我通过跳过digit属性尝试了它,然后imeOptions正常工作.
提前致谢
解决方法
android:singleLine = "true"
关于c# – Tridion 2009 – 使用Interops – 是否有可能为同一个Name添加多个setConditions的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于006-Spring Boot自动配置-Condition、Conditional、Spring提供的Conditional自动配置、@ConditionalOnProperty 来控制 Configuration 是否生效、@ConditionalOnProperty来控制Configuration是否生效、android – Edittext imeOptions actionDone不使用digits属性?等相关知识的信息别忘了在本站进行查找喔。
本文标签: